2014-11-25 50 views
1

我想寫一個程序,它從文件中讀取一個學號(7位數字符串),用x's代替前3位數字,並將結果打印到一個新文件中。我可以使用printf語句(打印到屏幕)完成我想要做的事情,但是當使用fprintf時,新文件中的結果不是我想要的。下面是代碼的相關行:fprintf語句中的 b轉義序列有問題..?

studentno=1234567 
fprintf(fp2, "%s\b\b\b\b\b\b\bxxx\t", studentno); 
printf聲明

,結果是xxx4567,如預期。然而,在fprintf聲明中,當我打開新文件時,它顯示1234567xxx。我真的不知道爲什麼,因爲其他轉義序列(例如'\n''\t')似乎在fprintf語句中與在printf語句中的作用相同。如果有人能夠指出我爲什麼會發生這種事情,那就太好了。

+0

如何:'fprintf(fp2,「xxx%d」,studentno%10000);' – ooga 2014-11-25 04:02:34

回答

0

您正在使用它在FILE類型。 如果它是一個文件,它將由文本編輯器來做它想做的事情。如果它確實是另一端的終端,則需要檢查它是否正確處理這些轉義字符。

它甚至可能是它不允許使用一些轉義字符與printf功能家族,但我不知道。在我看來,如果你能一起避免它們,那就容易多了。

無論如何,我會建議只是重寫了printf或者fprintf中語句來做到這一點:

fprintf(fp2, "xxx%s", studentno + 3); 

這將寫XXX,然後開始從4偏移從寫作的studentno字符。更容易,肯定會工作!

+0

完美工作。謝謝! – 2014-11-25 04:05:46

-1

您將printf/fprintf和終端代碼的格式代碼混合在一起,它指示終端執行某些操作。

爲F/printf的允許的格式代碼下面列出了you'll通知\ b isn't其中之一:

printf format codes references

What's發生的事情是,當你顯示的字符串你正在您的終端上創建,終端正在應用\ b退格並根據需要有效地顯示字符串,但是當您將其打印到文件時,它不起作用。有很多方法可以做你想做的事情,但我會建議簡單地從文件中讀取學生號碼作爲字符串,並在數組中操縱它。

0

不確定你是什麼意思的「當我打開新文件」。你用編輯器打開它嗎?貓?我懷疑vi newfile可能顯示不同於cat newfile。因爲不同的軟件(規範stdout vs你的文本編輯器)可能會顯示\ b不同或根本不顯示。

在任何情況下,如果您試圖在屏幕上隱藏studentno的前3位數字,則使用退格是一個不好的方法。不可靠和脆弱。黑客通過將輸出重定向到文件很容易獲得完整的數字,並且無法阻止它。我同意羅恩答案。