我對C編程相當陌生,所以我正在使用fgets()和sscanf()從文件中讀取數據。我建立了一個真正簡單的實驗在這裏:爲什麼printf只打印字符串中的第一個單詞?
#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
是哪個來自每一行的第一個詞。我發現,當我添加第二個%s的printf語句像這樣:
printf("%s%s", szInput);
那我實現所需的輸出:
This is the input:
This is more input.
The next line of Input.
More input here.
可有人請給我講解一下?我從來沒有聽說過使用第二個佔位符來獲取整個字符串。我一直沒有找到任何有助於解決我的問題。我已經在類中看到了只在打印語句中使用一個%s並且打印整個字符串的示例程序。感謝您幫助一位好奇的程序員!
P.S我使用Geany IDE運行Ubuntu 14.04 LTS。我知道你們中有些人會問這個問題。
'sscanf'的'%s'說明符表示讀取第一個單詞。如果你想打印整行,那麼就跳過 – 2015-02-24 04:12:25
的步驟,給出比printf的後續參數更多的格式說明符,導致未定義的行爲;你不能真正閱讀任何事情後 – 2015-02-24 04:15:15
據我所知,你使用sscanf是不必要的。 fgets調用將從文件中檢索文本。我會拋棄sscanf並打印出szInputBuffer。 – user3647894 2015-02-24 04:15:53