[英]Read int and char from the same file in C
我有一個看起來像這樣的文本文件:
i 3755
i 3633
i 4435
i 1434
我將如何閱讀這個作為輸入,我嘗試使用fscanf,但它繼續在'i'后給我一個隨機字符
例如輸出看起來像
我%3755
i5 3633
等等
這是我一直在嘗試的:
int data = 0;
char command;
if(fptr==NULL)
printf("File Cannot Be Read");
fscanf(fptr,"%c %d\n", &command, &data);
printf("%c " , command);
printf("%d\n" , data);
fscanf(fptr,"%s %d\n", &command, &data);
printf("%c " , command);
printf("%d\n" , data);
fscanf(fptr,"%s %d\n", &command, &data);
printf("%s " , command);
printf("%d\n" , data);
他們似乎都沒有工作。 感謝您的幫助!
編輯:對於遇到同樣問題的人來說,工作代碼是:
int data = 0;
char command;
fptr = fopen(argv[1], "r");
if(fptr==NULL)
printf("File Cannot Be Read");
while(fscanf(fptr,"%c %d \n", &command, &data) == 2)
{
if(command == 'i')
{
printf("insert found\n");
}
if(command == 'd')
{
printf("delete found\n");
}
}
}
fscanf(fptr,"%c %d", command, &data);
應該:
fscanf(fptr,"%c %d", &command, &data);
getchar(); // consume the newline character that fscanf left.
假設你定義了:
char command;
int data;
為簡單起見,我建議您在循環中使用fgets()
讀取一行,然后使用strtok()
獲取不同的“字符串”,然后根據您的解析方法進行轉換。 但邁克也是對的,你可以使用fscanf(fptr, "%c %d\\n", &command, &data)
來閱讀。 當您使用字符串時,可以忽略變量名稱前的“ &
”用法。 但是當它是一個字符或整數或浮點數時......你需要使用運算符的地址(“ &
”)
這是不正確的,將導致緩沖區溢出:
fscanf(fptr,"%s %d", &command, &data);
因為command
只有一個char
有足夠的空間,但是格式說明符為"%s"
fscanf()
將讀取直到下一個空格,然后將終止空字符寫入command
。 使用char[]
讀取和限制要讀取的char
數。
請注意, NULL
檢查只是打印一條錯誤消息,它實際上並不會阻止使用NULL
文件指針。
要確保每行的格式正確,請使用fgets()
讀取一行,然后使用sscanf()
讀取字段。 如果fscanf()
用於直接從文件中讀取,那么這兩行:
i 3755
被視為與單行相同:
i 3755
作為一個新行字符也是空白。 例:
if (fptr)
{
char line[1024];
while (fgets(line, 1024, fptr))
{
char command;
int data;
if (2 == sscanf(line, "%c %d", &command, &data))
{
/* Use 'command' and 'data'. */
}
}
}
在這一行:
fscanf(fptr,"%c %d", command, &data);
你應該給它一個命令指針。 像這樣 :
fscanf(fptr,"%c %d", &command, &data);
下一行無法工作,因為讀取光標已經在文件的末尾。
在你的fscanf
函數中,你必須通過在格式末尾添加空格來期望返回行。 像這樣
fscanf(fptr,"%c %d ", &command, &data);
空格字符替換返回到新行,制表和空格
順便說一下,我看到您使用%s
來讀取字符&command
,這是不正確的
fscanf(fptr,"%s %d\n", &command, &data);
你必須改用它
fscanf(fptr,"%c %d ", &command, &data);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.