我是C編程新手,所以我在下面的問題上遇到了困難。閱讀和比較txt文件中的數字C
我有一個包含類似以下信息的文本文件inp.txt
:
400;499;FIRST;
500;599;SECOND;
670;679;THIRD;
我需要輸入一個號碼,我的程序需要將其從inp.txt
文件編號進行比較。
例如,如果我輸入450,它是400和499之間,所以我需要寫的字FIRST
到文件out.txt
我不知道如何將一個字符數組轉換爲int。
我是C編程新手,所以我在下面的問題上遇到了困難。閱讀和比較txt文件中的數字C
我有一個包含類似以下信息的文本文件inp.txt
:
400;499;FIRST;
500;599;SECOND;
670;679;THIRD;
我需要輸入一個號碼,我的程序需要將其從inp.txt
文件編號進行比較。
例如,如果我輸入450,它是400和499之間,所以我需要寫的字FIRST
到文件out.txt
我不知道如何將一個字符數組轉換爲int。
我想你會想在你的程序的一般步驟(但我會留給你找出你怎麼想這樣做完全一致)
fscanf
可能會很方便。本頁面描述瞭如何使用它 - 頁面是關於C++的,但在C中使用它應該與http://www.cplusplus.com/reference/clibrary/cstdio/fscanf/相同。粗略地說,這個想法是,您爲fscanf
提供了一個格式說明符,用於表示要從文件中的行中提取的內容,並將它找到的位放入您指定的變量中)編輯:我會在一些細節,如要求提問者。這仍然是一種給你一些想法的骨架。 使用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_end
和char 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的優勢在於您可以指定最大數量的字符進行讀取,因此沒有危險溢出一個字符串緩衝區的長度),然後從字符串讀入你的整數變量。我沒有嘗試過這種方式。
你能給我一個簡單的例子嗎? – eduard
函數'fscanf'可能是你想要的東西。(你需要'#包括') –
marnir
我剛剛注意到你問了一個非常類似的問題在這裏:http://stackoverflow.com/questions/7785860/arrays-from-txt-in-c-long-你問這個問題後不久就會有數字。今後最好編輯你有的問題,而不是開始一個新的問題。 – marnir