如何在C中读取数字到字符串直到行尾

How to read number to string till end of the line in C

我有一个这样的输入文件

10 25 4 3 86 1 23 20 14 1 3 7 3 16 7
2

第一行:数字数组。

第2行:一个整数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;
}

我读完后打印了数组 a 但这是我得到的 Photo links

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

您必须将 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;
}

忽略行的事情...

继续阅读数字直到 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() 使数组动态化。