Scanf卡住了

时间:2011-11-23 01:53:52

标签: c

我遇到了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循环中的值。

2 个答案:

答案 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>