正如尚未指出的那样,fgets()
这里比scanf()
.
您可以读取与标准输入(键盘)关联的文件fgets(input, 1024, stdin);
在哪里的整行。
该函数从键盘读取每个字符,直到第一个换行符:'\n'(当然是在按下ENTER键后获得......)。重要提示:字符 '\n' 将成为数组input的一部分。 stdin
fgets()
现在,您的下一步是验证数组input中的所有字符(
从第一个字符到“\n”)是否为空白。
另外,请注意输入中第一个'\n'之后的所有字符都是垃圾,所以你不必检查它们。
你的程序可能如下:
char input[1024];
printf("Enter text. Press enter on blank line to exit.\n");
while (1) {
if (fgets(input, 1024, stdin) == NULL)
printf("Input Error...\n");
else {
/* Here we suppose the fgets() has reached a '\n' character... */
for (char* s = input; (*s != '\n') && isspace(*s); s++)
; /* skipping blanks */
if (*s == '\n')
break; /* Blank line */
else
printf("%s\n", input); /* The input was not a blank line */
}
}
该代码必须写在您的main()
块中,
更重要的是,必须首先包含标头<ctype.h>
,
因为isspace()
使用了该函数。
代码很简单:while永远执行,用户在每次迭代中输入一行,if语句检查是否发生了错误。
如果一切正常,则执行for(;;)语句,该语句探索数组输入以观察那里是否只有空白……或没有。for
迭代一直持续到找到
第一个换行符 '\n',或者出现一个非空白字符。什么
时候
终止,这意味着保存在 中的最后一个分析字符*s
是换行符(意味着所有早期字符都是空白),或者不是(意味着input[]中至少有一些非空白字符,所以输入是普通文本)。
“ethernal”while(1)
仅在读取空行的情况下才会被破坏(参见break
第 11 行中的语句)。