我正在尝试创建一个循环,一直循环直到输入“仅”换行符,或者只是一个空格(直到输入行未输入任何内容)为止。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int num;
while(1)
{
scanf("%d",&num);
if(num==NULL)
break;
printf("%d",num);
}
return 0;
}
答案 0 :(得分:0)
使用scanf
不能做到这一点(至少不容易做到)。如果要处理用户输入,scanf
是一个错误的选择(事实上,在我用C语言开发的所有岁月中,我从未使用过scanf
;建议您完全避免使用它。)< / p>
num==NULL
毫无意义:num
是一个数字,但是NULL
是一个指针值。如果要检查scanf
是否成功,则需要检查其返回值。
我会做类似的事情:
char line[100];
while (fgets(line, sizeof line, stdin)) { // read input line by line
int num;
if (sscanf(line, "%d", &num) != 1) { // the line didn't start with a valid integer
break;
}
printf("%d\n", num);
}
如果您要专门检查一个空字符串,而不仅仅是一个看起来不像数字的字符串,则可以使用strspn
:
if (line[strspn(line, " \t\n")] == '\0') {
// line contains spaces / tabs / newlines only
答案 1 :(得分:0)
除了整数以外,还有其他可能在一行上的东西。您的代码表示预期的整数,但您的文本仅表示该行为空白或仅包含空格。
给出问题中的文字:
#include <stdio.h>
#include <string.h>
int main( void )
{
char line[1024];
while( fgets( line, sizeof( line ), stdin ) )
{
if( (strlen( line ) == 1 )
|| (strlen( line ) == 2 && line[0] == ' '))
{
// all done
break;
}
else
{
// process line
}
} // end while
}