我遇到了scanf()
卡住的问题,继续该程序的唯一方法是输入exit。
我的输入是这样的:
L 1 1 3 4 C 2 3 4
其中数字是L和C的参数。
int main ()
{
// Get use input and put in array
int count, x;
int array[4];
char type;
scanf("%c", &type);
for (x = 0; x < 2; x++)
{
if (type == 'L')
{
for (count = 0; count < 4; count++)
{
scanf("%d", &array[count]);
}
} else if (type == 'C')
{
for (count = 0; count < 3; count++)
{
scanf("%d", &array[count]);
}
}
if (scanf("%*[ \n\t]%c", &type) == 0)
{
printf("Error");
break;
}
}
有问题的scanf语句:
scanf("%*[ \n\t]%c", &type)
如果我不在线的末尾,工作正常,否则会中断。但是,我不知道我将拥有多少L和C对象,因此不能依赖for循环中的值。
答案 0 :(得分:2)
我认为你的问题在这里:
if (scanf("%*[ \n\t]%c", &type) == 0)
您正在尝试检查您是否没有要阅读的字符,因此您要检查scanf
是否返回EOF
(-1
,但只需使用{ {1}}常数)。如果在看到EOF
返回时中断,那么一旦您在Linux上输入进程( Ctrl + D ),您就会退出循环,我相信 Ctrl + Z 在Windows上输入
答案 1 :(得分:2)
如果您的数据是面向行的,那么从POSIX 2008中使用fgets()
或可能getline()
读取行,然后使用sscanf()
来解析行,可能会做得更好。< / p>