關於fprintf函式格式化輸出到檔案的內容在記事本中不對齊的問題
阿新 • • 發佈:2021-02-06
問題:類似fprintf(fp, "%8d %8s %8d ", m, s, n);的寫法無法達到預期效果
(1)Dev C++環境下實驗
#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE * fp;
fp = fopen("file.txt","r+");
char s[128];
char t[128];
int m, n;
int i=3;
if(fp== NULL)
{
printf("cannot open file");
exit(0);
}
while(i--)
{
scanf("%d", &m);
scanf("%s%d", s, &n);
fprintf(fp, "%8d %8s %8d\n", m, s, n); //輸出到檔案,即寫入檔案
}
rewind(fp);
for(i=0;i<3;i++)
{
fscanf (fp, "%d %s %d", &m, t, &n); //從檔案輸出,即讀入到t[]
printf("%8d %8s %8d\n", m, t, n); //顯示到螢幕
}
fclose(fp);
return 0;
}
編譯執行,輸入:
12 LLL 55
287 YYYYY 265
28763 LOSWNMY 923
輸出:
12 LLL 55
287 YYYYY 265
28763 LOSWNMY 923
檢查檔案file.txt:
複製貼上的結果:
12 LLL 55
287 YYYYY 265
表面看上去的結果:
證明:寫入檔案內容正確,問題在顯示
(2)Visual Studio Code在一定配置環境下實驗
配置:
.vscode
launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch", // 配置名稱,將會在啟動配置的下拉選單中顯示
"type": "cppdbg", // 配置型別,這裡只能為cppdbg
"request": "launch", // 請求配置型別,可以為launch(啟動)或attach(附加)
"program": "${workspaceRoot}/${fileBasenameNoExtension}.exe",// 將要進行除錯的程式的路徑
"args": [], // 程式除錯時傳遞給程式的命令列引數,一般設為空即可
"stopAtEntry": false, // 設為true時程式將暫停在程式入口處,一般設定為false
"cwd": "${workspaceRoot}",// 除錯程式時的工作目錄,一般為${workspaceRoot}即程式碼所在目錄
"environment": [],
"externalConsole": true,// 除錯時是否顯示控制檯視窗,一般設定為true顯示控制檯
"MIMode": "gdb",
"miDebuggerPath": "D:\\TDM-GCC-64\\bin\\gdb64.exe",// miDebugger的路徑,注意這裡要與MinGw的路徑對應
"preLaunchTask": "g++", // 除錯會話開始前執行的任務,一般為編譯程式,c++為g++, c為gcc
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
tasks.json
{
"version": "2.0.0",
"command": "g++",
"args": ["-g","${file}","-o","${fileBasenameNoExtension}.exe"], // 編譯命令引數
"problemMatcher": {
"owner": "cpp",
"fileLocation": ["relative", "${workspaceRoot}"],
"pattern": {
"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
}
}
編譯執行(1)中程式碼(微改動)
改動為:
fp = fopen(“file2.txt”,“w+”);
輸入:
111 yadn 219
3216 auen 349
13 uiaskj 347
直接檢查檔案:
得出結論:問題不存在