我有一个像这样的输入文件
10 25 4 3 86 1 23 20 14 1 3 7 3 16 7
2
第1行:数字数组。
第二行:整数k。
我尝试 fgets()来阅读它们,但它无效。这是我的代码:
int main(){
FILE *input = fopen("Input7.txt","r");
int a[2000],k;
fgets(a,2000,input);
fscanf(input,"%d",&k);
fclose(input);
int i,n;
n = 15; //My example array have 15 numbers
for (i=1;i<=n;++i){
printf("%d ",a[i]);
}
return 0;
}
我读完后打印出阵列,但这是我得到的 Photo links
我该如何解决这个问题?顺便说一句,我想知道我读入数组的数量。谢谢你的帮助。
答案 0 :(得分:0)
您必须将a
数组的类型更改为char
,因为fgets
等待char*
作为第一个参数。
下一个重要的事情是fgets
将字符读入指定的char
数组而不是直接读取数字,您必须对您读取的字符序列进行标记,并将每个标记转换为整数。您可以使用strtok
函数对a
数组进行标记。
#include <stdio.h> // for fgets, printf, etc.
#include <string.h> // for strtok
#define BUFFER_SIZE 200
int main() {
FILE* input = fopen("Input7.txt", "r");
char a[BUFFER_SIZE] = { 0 };
char* a_ptr;
int k, i = 0, j;
int n[BUFFER_SIZE] = { 0 };
fgets(a, BUFFER_SIZE, input); // reading the first line from file
fscanf(input, "%d", &k);
a_ptr = strtok(a, " "); // tokenizing and reading the first token
while(a_ptr != NULL) {
n[i++] = atoi(a_ptr); // converting next token to 'int'
a_ptr = strtok (NULL, " "); // reading next token
}
for(j = 0; j < i; ++j) // the 'i' can tell you how much numbers you have
printf(j ? ", %d" : "%d", n[j]);
printf("\n");
fclose(input);
return 0;
}
答案 1 :(得分:0)
忽略线条......
只需继续阅读数字直至EOF
int array[1000];
int k = 0;
int prev, last;
if (scanf("%d", &prev) != 1) /* error */;
while (scanf("%d", &last) == 1) {
array[k++] = prev;
prev = last;
}
// array has the k numbers in the first line
// prev has the single number in the last line
如果您愿意,可以使用malloc()
,realloc()
和free()
制作数组动态。