我无法将文件中的一串数字转换为整数数组,而不是1 2 55 -44 22
。
到目前为止我的程序除了一个bug之外还有效,它将55
之类的整数解释为5
和5
。
int readNumbers(int array[], char* fname) {
78 // TODO: will you read the comments above this function carefully???
79 // TODO: note those pre- and post-conditions!
80 int numberRead = 0;
81 FILE* fp;
82 int ch;
83 int counter = 0;
84
85 // Use fopen to try to open the file for reading
86 // TODO:
87 fp = fopen(fname, "r");
88 // Test to see if the file was opened correctly
89 // TODO:
90 if (fp == NULL) {
91 printf("Error opening file\n");
92 return -1;
93 }
94 // Now read until end of file
95 // TODO:
96 while ((ch = fgetc(fp)) != EOF) {
97 if (ch != ' ' && ch != '\n') {
98 array[counter] = ch - '0';
99 counter++;
100 numberRead++;
101 }
102 }
103 if (ferror(fp)) {
104 fclose(fp);
105 return -1;
106 }
107 // Close the file pointer
108 // TODO:
109 fclose(fp);
110
111 // Return the number of items read
112 return numberRead; // can it be negative? if in doubt, read.
113 }
我看过其他地方,很多人都使用fgets?我不确定这是否会产生影响,并希望在做出改变之前听取意见。
答案 0 :(得分:3)
这里是如何使用fgets
char arr[PickYourSize];
char* ptr;
fgets(arr , sizeof arr , fp);
ptr = strtok(arr , " ");
while(ptr)
{
array[counter++] = strtol(ptr , NULL , 10);
++numberRead;
ptr = strtok(NULL , " ");
}
答案 1 :(得分:2)
您正在使用fgetc
。它会做人物阅读。所以你面临着很难满足你的要求。我请求您使用fscanf
,这也是一种简单的方法。
fscanf
如果在匹配任何参数
示例代码
int main ()
{
FILE *fp = fopen ("/home/inputs.in", "r");
int d=0;
while ( EOF != fscanf ( fp, "%d ", &d ))
{
printf ("%d ", d);
}
return 0;
}