2011-10-16 45 views
1

我是C編程新手,所以我在下面的問題上遇到了困難。閱讀和比較txt文件中的數字C

我有一個包含類似以下信息的文本文件inp.txt

400;499;FIRST; 
500;599;SECOND; 
670;679;THIRD; 

我需要輸入一個號碼,我的程序需要將其從inp.txt文件編號進行比較。

例如,如果我輸入450,它是400和499之間,所以我需要寫的字FIRST到文件out.txt

我不知道如何將一個字符數組轉換爲int。

+1

函數'fscanf'可能是你想要的東西。(你需要'#包括') – marnir

+1

我剛剛注意到你問了一個非常類似的問題在這裏:http://stackoverflow.com/questions/7785860/arrays-from-txt-in-c-long-你問這個問題後不久就會有數字。今後最好編輯你有的問題,而不是開始一個新的問題。 – marnir

回答

2

我想你會想在你的程序的一般步驟(但我會留給你找出你怎麼想這樣做完全一致)

  1. 負載,每個範圍和文本將文件inp.txt中的「FIRST」,「SECOND」等轉換爲數組或類似的數組。正如我在上面的評論中所說的,fscanf可能會很方便。本頁面描述瞭如何使用它 - 頁面是關於C++的,但在C中使用它應該與http://www.cplusplus.com/reference/clibrary/cstdio/fscanf/相同。粗略地說,這個想法是,您爲fscanf提供了一個格式說明符,用於表示要從文件中的行中提取的內容,並將它找到的位放入您指定的變量中)
  2. 提示用戶輸入一個數字。
  3. 去翻陣列(縣)工作了哪個範圍的數量適合,因此,其文本輸出

編輯:我會在一些細節,如要求提問者。這仍然是一種給你一些想法的骨架。 使用fopen功能,這樣的事情(聲明指針FILE* input_file):

input_file = fopen("c:\\test\\inp.txt", "r") /* "r" opens inp.txt for reading */ 

然後,這是很好的檢查文件被成功打開,如果通過檢查input_file == NULL

然後使用fscanf從文件的一行讀取詳細信息。循環瀏覽文件的行,直到讀完所有內容。您將fscanf指針指向您希望它將文件每一行中的信息放入的變量。 (這有點像printf格式化說明符反向)。

因此,您可以聲明int range_start, range_endchar range_name[20]。 (爲了簡單起見,我們假設所有的單詞最多隻有20個字符,但從長遠來看這可能不是一個好計劃)。

while (!feof(input_file)) { /* check for end-of-file */ 

    if(fscanf(input_file, "%d;%d;%s", &range_start, &range_end, range_name) != 3) { 
     break; /* Something weird happened on this line, so let's give up */ 
    else { 
     printf("I got the following numbers: %d, %d, %s\n", range_start, range_end, range_name); 
    } 
} 

希望能給你一些想法。我試過運行這段代碼,它似乎工作。然而,值得一提的是fscanf有一些缺點(例如參見http://mrx.net/c/readfunctions.html),所以另一種方法是使用fgets來獲得每一行(fgets的優勢在於您可以指定最大數量的字符進行讀取,因此沒有危險溢出一個字符串緩衝區的長度),然後從字符串讀入你的整數變量。我沒有嘗試過這種方式。

+0

你能給我一個簡單的例子嗎? – eduard