[英]Using fscanf to read text then printing that text into a file using fprintf
[英]Read a text file using fscanf() in a while loop
所以我試圖在while循環中使用 fscanf() 從輸入文本文件中讀取成對的數字。 文本文件將類似於以下內容:
(2, 50) (4, 30) (9, 30) (10, 400) (-5, -40)
(7, 20) (19, 200) (20, 50) (-18, -200) (-2, 29)
我的代碼是:
int main()
{
FILE *fp;
fp = fopen("File", "r");
if (fp == NULL)
{
perror("Invalid input!");
return 0;
}
else
{
int key, value;
int check;
while (fscanf(fp, "(%d,%d)", &key, &value) != EOF)
{
printf("(%d, %d)\n", key, value);
check = fscanf(fp, "(%d,%d)", &key, &value);
printf("%d", check);
}
}
return 0;
}
但是 output 不是遍歷文件中的每一對,而是無限地打印 (2,50)。 有人可以幫我修復我的代碼嗎?
我也希望“檢查”至少返回 2,因為它成功地有兩個值,即 2 和 50。但它總是返回 0。
之后您必須閱讀空間,這可以通過以下方式完成:
fscanf(fp, "(%d,%d)%*c", &key, &value)
。 這里%*c
正在讀取一個字符並將其丟棄。
或通過
fscanf(fp, "(%d,%d) ", &key, &value)
。 在這里,您明確地閱讀了空間。
筆記:
我不確定為什么您只在之后才打印支票,您實際上是在跳過一對,請注意這一點。
允許輸入中的空格
"(%d,%d)"
不讀取括號之間的空格: ) (
。允許在'('
, ')'
, ','
之前使用空格。 "%d"
已經允許前導空格.
// while (fscanf(fp, "(%d,%d)", &key, &value) != EOF)
while (fscanf(fp, " (%d ,%d )", &key, &value) != EOF)
// ^ ^ ^
與目標進行比較,而不是失敗的目標之一
fscanf(fp, " (%d,%d )"...
返回 2,1,0,EOF。只有當返回值為 2 時,循環才會繼續。使用!= EOF
時,返回值為 2 時循環繼續, 1 或 0。
// while (fscanf(fp, " (%d ,%d )", &key, &value) != EOF)
while (fscanf(fp, " (%d ,%d )", &key, &value) == 2)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.