我对C编程还比较新,所以我正在使用fgets()和sscanf()读取文件数据。我设置了一个非常简单的实验:
#include <stdio.h>
#include <stdlib.h>
main()
{
char szInputBuffer[100];
FILE *pFile;
char szInput[100];
int i;
pFile = fopen("MyFile.txt", "r");
printf("This is the input: \n\n");
for (i = 0; i <= 2; ++i)
{
fgets(szInputBuffer, 100, pFile);
sscanf(szInputBuffer, "%s", szInput);
printf("%s", szInput);
}
}
我正在读取 MyFile.txt 文件,它包含如下内容:
This is more input.
The next line of Input.
More input here.
然而,我的输出是:
This is the input:
ThisTheMore
每一行的第一个单词是什么。我发现,当我在printf语句中添加第二个%s时,如下所示:
printf("%s%s", szInput);
我要达到预期的输出:
This is the input:
This is more input.
The next line of Input.
More input here.
有人能给我解释一下吗?我从未听说过使用第二个占位符来获取整个字符串。我在这里找不到任何有助于解决我的问题的东西。我在课堂上看到了一些示例程序,只在打印语句中使用一个%s,整个字符串就被打印出来了。谢谢帮助好奇的程序员!
附言:我正在运行Ubuntu 14.04 LTS,使用Geany IDE。我知道你们中的一些人会问到这个。
sscanf
中的%s
格式说明符表示读取第一个单词。如果您想打印整行,则可以跳过该步骤。 - M.Mprintf
中给出比后续参数更多的格式说明符会导致未定义的行为;在此之后发生的事情你无法真正理解。 - M.M