我必须使用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。
答案 0 :(得分:2)
您需要更改
scanf("%19[^\n]",plaintext)
以便在读取第一行后读取缓冲区中的新行字符。
尝试
scanf("%19[^\n] ",plaintext)
空格读取行尾的新行字符