/编辑/ 我是新来的。 我有一个文本文件:
6
<cr>
R 0
R 1
R 4
R 36
R 0
R 4
这就是我所拥有的。我想将每一行读入一个数组,以便我可以将该数组转换为一个整数,这样我就可以打印出我想要的任何一行的数字。
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
int main()
{
FILE *fr; /*declares file pointer*/
int i, j, num[32];
char array[32][32], input_file[32], line[32];
printf("Enter file: ");
fflush(stdin);
scanf("%s", input_file);
fr = fopen(input_file, "r");
for(i=0;i<32;i++)
for(j=0;j<32;j++){
array[i][j] = \'0';
}
for(i=0;i<32;i++){
line[i] = '\0';
}
if(fr != NULL){
while(fgets(line, sizeof(line), fr) != NULL){
strcpy(array[i],line);
num[i] = atoi(array[i]);
i++;
printf("%d\n", num[i]);
}
}fclose(fr);
else{
perror(input_file);
}
}
我没有收到任何错误,但它没有打印正确的东西;这就是它打印的内容:
-370086
-370086
-370086
-370086
-370086
-370086
-370086
-370086
任何人都可以向我解释出现了什么问题吗?
答案 0 :(得分:2)
我想我的处理方式有点不同。虽然你没有明确说明,但我会假设第一个数字告诉我们我们要阅读多少行/数字(不包括空白行)。因此,我们想要阅读,然后阅读其余的行,忽略任何前导的非数字,只关注数字。
如果这是正确的,我们可以稍微简化一下代码:
int num_lines;
int i;
int *numbers;
fscanf(infile, "%d", &num_lines); // read the number of lines.
numbers = malloc(sizeof(int) * num_lines); // allocate storage for that many numbers.
// read that many numbers.
for (i=0; i<num_lines; i++)
fscanf(infile, "%*[^0123456789]%d", numbers+i);
// the "%*[^0123456789]" ignores leading non-digits. The %d converts a number.
答案 1 :(得分:1)
有几个问题:
input_file
设置为任何内容,因此您似乎正在打开一个随机文件。i
。array
,所以不可能知道它是如何宣布的。如果您担心,应该使用memset()
清除阵列。无需清除将被覆盖的数组,例如由line
写入的fgets()
。
答案 2 :(得分:0)
假设array
是char
数组,请执行以下操作:
...
strcpy(array[i],line);
num[i] = atoi(array[i]);
...
您实际上是在转换整行,而不是其中的integer
。您应该考虑使用fscanf
,或者至少在行变量中搜索整数并将其转换。
例如,atoi(array[i])
与atoi("R 32\n")
相同。