簡體   English   中英

C中的fprintf輸出錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM