[英]Wrong fprintf output in c
因此,這是我嘗試使用的代碼:
char* inFile = "input.txt";
FILE *out = fopen("output.txt", "a+");
int i = 0
while(i < 5){
int countFound = findWord(inFile, keyWord[i]);//returns count of keywords in given file
fprintf(out, "%s: %d\n", keyWord[i], countFound);
i++;
}
fclose(out);
此代碼的輸出是:
youshouldsee1
: 3
youshouldsee2
: 3
youshouldsee3
: 3
youshouldsee4
: 3
youshouldsee5: 1
預期產量:
youshouldsee1: 3
youshouldsee2: 3
youshouldsee3: 3
youshouldsee4: 3
youshouldsee5: 1
我真的不明白為什么輸出是這樣的,它不應該打印字符串,然后int然后再換一行嗎? 另請注意,最后一行之后沒有換行符,應該有換行符。 我做了一些測試,發現如果將fprintf
語句更改為fprintf(out, "%s\\n", keyWord[i]);
輸出為:
youshouldsee1
youshouldsee2
youshouldsee3
youshouldsee4
youshouldsee5
格式要好得多。 再次注意,最后一行之后沒有換行符,應該有換行符。 我注意到,僅用printf
語句執行此操作時,我遇到了完全相同的問題,但是輸出有些混亂。
有人知道導致此特定問題的原因嗎? 非常感激。
數組keyWord []是一個雙指針,我不確定這是否有所不同,但我想我會提一下。 就像char** keyWord;
這樣聲明char** keyWord;
。 它的創建過程如下:
char *tempWord = "something";
keyWords[x] = strdup(tempWord);
那可能完全是無關緊要的,但我認為最好提一下。
您的keyWord[i]
字符串中可能有一些回車符( '\\r'
或0x0D)和/或退格字符( '\\b'
或0x08)。
CR和退格鍵通常不輸出到終端,而是移動終端光標-CR將光標移至當前行的開頭,而退格鍵將光標向后移動一個字符。 打印后續字符時,它們會覆蓋以前的字符。 所以這段代碼
printf("foobar\rbaz\n");
結果輸出
bazbar
和這段代碼
printf("foo\bbar\n");
結果輸出
fobar
如果查看輸出的原始字節而不將其打印到終端,則應該看到CR和退格鍵是普通的一天。 我喜歡使用程序hexdump(1)
來做到這一點。 例如:
$ echo -e 'foobar\rbaz'
bazbar
$ echo -e 'foobar\rbaz' | hexdump -C
00000000 66 6f 6f 62 61 72 0d 62 61 7a 0a |foobar.baz.|
0000000b
因此,我建議您查看程序輸出中的原始數據,找出討厭的字符在哪里,然后找出如何消除它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.