簡體   English   中英

C-從格式化的文本文件中讀取帶有整數的字符串

[英]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

我怎樣才能解決這個問題? colorStrrgb變量是在程序的前面設置的。

您的代碼的問題是文本包含空格, %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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM