[英]C - Read string with integers from formatted text file
我有一個采用以下格式的文本文件:
Thing 1: 0 0 128
Other thing: 255 64 255
Something else: 32 32 8
我打算最終向此文件中添加更多內容,但格式將保持不變。 我想要做的是將冒號之前的所有內容讀取為字符串,並將其后面的所有內容讀取為整數。 我已經試過了:
fscanf((file = fopen("colors.txt", "r")) == NULL){
return -1;
}
fscanf("%s: %d %d %d", colorStr, &r, &g, &b);
while(!feof(file)){
printf("%s: %d %d %d", colorStr, r, g, b);
fscanf(file, "%s: %d %d %d", colorStr, &r, &g, &b);
}
fclose(file);
但是,我得到以下輸出:
Thing 1:: 0 0 0
0: 0 0 0
0: 0 0 0
128: 0 0 0
等等。 理想情況下,輸出應如下所示:
Thing 1: 0 0 128
Other thing: 255 64 255
Something else: 32 32 8
我怎樣才能解決這個問題? colorStr
, r
, g
和b
變量是在程序的前面設置的。
您的代碼的問題是文本包含空格, %s
不允許使用空格。
將格式字符串更改為%[^:]
將解決此問題。
但是,代碼仍然容易受到緩沖區溢出的影響。 確保您的格式字符串包括colorStr
的最大大小,以防止出現這種情況:
char colorStr[100];
fscanf(file, " %99[^:]: %d %d %d", colorStr, &r, &g, &b);
您的代碼使用feof(file)
,這是不正確的。 您應該將fscanf
放入循環標頭中。 這將使您在循環之前刪除重復的fscanf
調用:
while(fscanf(file, " %99[^:]: %d %d %d", colorStr, &r, &g, &b) == 4) {
printf("%s: %d %d %d\n", colorStr, r, g, b);
}
請注意前導%
格式說明符前面的空格。 它指示fscanf
跳過前一行的尾隨空格和/或'\\n'
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.