我有一个从命令行读取文件的程序(由整数组成的文件 - 见下文),将其放入数组然后打印数组。
#include <stdio.h>
#include <stdlib.h>
#define SIZEBUFF 1024
int main (int argc, char *argv[])
{
if (argc < 2)
{
printf("Missing file\n");
return (EXIT_FAILURE);
}
FILE *file = fopen (argv[1],"r");
int integers [144]; //Array that input is stored
char buffer[SIZEBUFF];
int count = 0;
while (fgets(buffer,sizeof (buffer),file) > 0){ // !=EOF gives seg. fault if used
integers[count] = atoi(buffer);
count++;
}
fclose(file);
printf ("The contents of integer array are: \n");
int j;
for (j = 0; j < 144;j++) printf ("%d\t",integers[j]);
return (EXIT_SUCCESS);
}
注意:真实文件由144个整数组成。我刚拿了第12个
如何只打印文件中存在的数字?
答案 0 :(得分:2)
这个问题是因为您编写的代码假定fgets()
在每次调用时从文件中读取单个整数。但如果整数存储在同一条线上则不是这样。
fgets() stops when either (n-1) characters are read, the newline character is read, or the end-of-file is reached, whichever comes first.
所以这里fgets一次从文件中读取多个整数,因此atoi()
也没有得到文件中的整数。
您可以使用fscanf()
直接读取整数,
fscanf(file,"%d",&integers[count]);
你可以循环遍历这个语句144次,因为你知道文件中的整数或者可以使用,
fscanf (file, "%d", &integers[count]);
while (!feof (file))
{
fscanf (file, "%d", &integers[++count]);
}
答案 1 :(得分:0)
您可以使用fscanf
,就像使用scanf
从控制台读取144个整数一样。
答案 2 :(得分:0)
您应该使用fscanf
将文件中的整数读入数组。
int count = 0;
while(fscanf(file, "%d", &integers[count++]) == 1)
; // the null statement
int j;
for(j = 0; j < count; j++)
printf("%d\t", integers[j]);