在while循环

时间:2017-04-30 06:21:06

标签: c

我必须使用scanf从文件中读取一系列输入。但在两种情况下有不同的结果。 Code1 - 读取整数和字符数组。

char plaintext[20];
int started = 0;
int x;


while (scanf("%i,%19[^\n]",&x,plaintext) == 2)
{
    if (started == 1)
        printf(",\n");
    else 
            started = 1;
    printf("i read a line from a file");
}
printf("\n");

这完全没问题。 scanf读取文件中的每一行,printf()输出每行输入所需的行。

Code2 - 只读取一个char数组

char plaintext[20];
int started = 0;

while (scanf("%19[^\n]",plaintext) == 1)
{
    if (started == 1)
        printf(",\n");
    else 
            started = 1;
    printf("i read a line from a file");
}
printf("\n");

这里,scanf只读取第一行并打印“我从文件中读取一行”只有一次。为什么?

一种解决方案是在代码2中的scanf中使用%* c。但为什么代码1工作正常,而不是代码2。

1 个答案:

答案 0 :(得分:2)

您需要更改

scanf("%19[^\n]",plaintext)

以便在读取第一行后读取缓冲区中的新行字符。

尝试

scanf("%19[^\n] ",plaintext)

空格读取行尾的新行字符