我是 C 編程的新手。所以我可能有一個簡單的問題。那么為什么fscanf不能使用 fopen(read mode) 呢?我的意思是,據我所知,我必須先使用 fopen(write mode),然后 fopen(read mode) 才能作業。如果我在 fopen(write mode) 之前先使用 fopen(read mode),它就不會像這段代碼那樣作業。另一件事是,為什么fscanf不能讀取這段代碼中的空格?我已經先嘗試了%*sfopen(讀取模式),但它沒有用。
這是我的簡單代碼:
int main() {
FILE *fp;
fp = fopen("Test.txt", "r ");
char name[100], hobby[100];
int age;
fscanf(fp, "Name:%*s\nAge:%d\nHobby:%*s", &name, &age, &hobby);
printf("\nScan Result\n%s\n%d\n%s", name, age, hobby);
fclose(fp);
return 0;
}
測驗.txt檔案:
Name:This is a test
Age:21
Hobby:Play games
當我運行它時:
Scan Result
`?
0
>m
Process returned 0 (0x0) execution time : 0.016 s
Press any key to continue.
那么我錯過了什么嗎?還是不可能?用給出的代碼回答對我更好地學習很有幫助,謝謝。
uj5u.com熱心網友回復:
%s讀取一個單詞,用于%[^\n]讀取所有內容,直到換行。
&掃描到字串時不要放在陣列名稱之前。當作為函式引數傳遞時,陣列會自動衰減為指標。
fscanf(fp,"Name: %[^\n] Age: %d Hobby: %[^\n]",name,&age,hobby);
或者使用fgets()一次讀取一行,然后您可以使用sscanf()從中提取。
char line[100];
fgets(line, sizeof line, fp);
sscanf(line, "Name: %[^\n]", name);
fgets(line, sizeof line, fp);
sscanf(line, "Age: %d", &age);
fgets(line, sizeof line), fp;
sscanf(line, "Hobby: %[^\n]", hobby);
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/493605.html
上一篇:發送包含文本檔案內容的電子郵件
下一篇:使用C編輯檔案
