字符串输入中的一个疑问,请求解惑!该怎么处理
字符串输入中的一个疑问,请求解惑!!
[code=C/C++][/code]
#include <stdio.h>
#define LEN 10
char *get_str( char *ptr ,int n );
int main(int argc, char *argv[])
{
char input[LEN] ;
char *chk;
chk = get_str(input ,LEN-1);
if(chk == NULL)
{
puts("Iput failed");
}
else
puts(input);
puts("DONE!");
system(" pause");
return 0;
}
char *get_str(char *ptr ,int n)
{
int i ;
int ch ;
for (i = 0;i < n;i++)
{
ch = getchar();
if (ch != EOF)
ptr[i] = ch;
else
break;
}
if (ch == EOF)
return NULL ;
else
{
ptr[i] = '\0';
return ptr;
}
}
程序设计较为简单:读取N个字符(包括空格、制表符和换行符),把结果存储在一个数组中。
执行(在C-free 5.0上编译):
LIU ^Z
^Z
Iput failed
请按任意键继续. . .
疑问是: 应该输入第一【ctrl+Z】时就该输出Input failed
为什么要回车后再输入【ctrl+Z】时才输出input failed ?
这段知识有点模糊,希望有人指点一下,不胜感激。
------解决方案--------------------
windows认为,如果缓冲中还有其它内容,ctrl+z不表示输入结束,仅代表当前行输入结束,只在单独一个ctrl+z的时候才表示输入结束
[code=C/C++][/code]
#include <stdio.h>
#define LEN 10
char *get_str( char *ptr ,int n );
int main(int argc, char *argv[])
{
char input[LEN] ;
char *chk;
chk = get_str(input ,LEN-1);
if(chk == NULL)
{
puts("Iput failed");
}
else
puts(input);
puts("DONE!");
system(" pause");
return 0;
}
char *get_str(char *ptr ,int n)
{
int i ;
int ch ;
for (i = 0;i < n;i++)
{
ch = getchar();
if (ch != EOF)
ptr[i] = ch;
else
break;
}
if (ch == EOF)
return NULL ;
else
{
ptr[i] = '\0';
return ptr;
}
}
程序设计较为简单:读取N个字符(包括空格、制表符和换行符),把结果存储在一个数组中。
执行(在C-free 5.0上编译):
LIU ^Z
^Z
Iput failed
请按任意键继续. . .
疑问是: 应该输入第一【ctrl+Z】时就该输出Input failed
为什么要回车后再输入【ctrl+Z】时才输出input failed ?
这段知识有点模糊,希望有人指点一下,不胜感激。
------解决方案--------------------
windows认为,如果缓冲中还有其它内容,ctrl+z不表示输入结束,仅代表当前行输入结束,只在单独一个ctrl+z的时候才表示输入结束