[英]Reading integers from txt file in C
我正在制作一個文件讀取器,該文件讀取器從文件中逐行讀取整數。 問題是那不起作用。 我認為我以錯誤的方式使用fscanf。 有人能幫我嗎?
我已經在其他問題中尋找答案,但是找不到任何能解釋為什么我的代碼無法正常工作的答案。
int read_from_txt(){
FILE *file;
file = fopen("random_numbers.txt", "r");
//Counting line numbers to allocate exact memory
int i;
unsigned int lines = 0;
unsigned int *num;
char ch;
while(!feof(file)){
ch = fgetc(file);
if (ch == '\n'){
lines++;
}
}
//array size will be lines+1
num = malloc(sizeof(int)*(lines+1));
//storing random_numbers in num vector
for(i=0;i<=lines;i++){
fscanf(file, "%d", &num[i]);
printf("%d", num[i]);
}
fclose(file);
}
txt文件類似於:
12
15
32
68
46
...
但是此代碼的輸出始終給出“ 0000000000000000000 ...”
您忘記了“倒帶”文件:
fseek(file, 0, SEEK_SET);
您的讀取過程將遍歷文件兩次-一次計數行,再一次讀取數據。 您需要在第二遍之前返回文件的開頭。
請注意,您可以通過以下方式一次性使用realloc
:在循環中將數字讀入一個臨時int
,對於每次成功的讀取,通過調用realloc
將num
數組擴展一個。 這將根據需要擴展緩沖區,並且您無需倒帶。
在重新分配給num
之前,請仔細檢查realloc
的結果,以避免內存泄漏。
您可以嘗試使用標准IO中的getline
函數,然后僅使用一個循環就將解析后的數字添加到數組中。 請參見下面的代碼。 請檢查https://linux.die.net/man/3/getline
另外,您可以使用atoi
或strtoul
函數將讀取的行轉換為整數。 隨時檢查https://linux.die.net/man/3/atoi或https://linux.die.net/man/3/strtoul
下面的代碼對帶有數字列表的文件求值,並將這些數字添加到C整數指針中
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char ** argv) {
FILE * file;
file = fopen("./file.txt", "r");
size_t read;
char * line = NULL;
size_t line_len = 0;
size_t buffer_size = 10;
int * buffer = (int *)malloc(sizeof(int) * buffer_size);
int seek = 0;
while((read = getline(&line, &line_len, file)) != -1) {
buffer[seek++] = atoi(line);
if (seek % 10 == 0) {
buffer_size += 10;
buffer = (int *)realloc(buffer, sizeof(int) * buffer_size);
}
}
for (int i = 0; i < seek; i++) {
printf("%d\n", buffer[i]);
}
free(buffer);
fclose(file);
}
如果您不確定應該使用哪個轉換功能。 您可以在以下位置檢查atoi
和sscanf
之間的區別:sscanf或atoi將字符串轉換為整數的區別是什么?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.