如何读取数字到字符串直到C的行结束

时间:2017-07-14 10:48:55

标签: c arrays file input eol

我有一个像这样的输入文件

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

我该如何解决这个问题?顺便说一句,我想知道我读入数组的数量。谢谢你的帮助。

2 个答案:

答案 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()制作数组动态。