如何编写代码从输入文件中读取单独的行中的输入,并执行与此代码在C中所做的相同的操作

如何编写代码从输入文件中读取单独的行中的输入,并执行与此代码在C中所做的相同的操作,c,C,我写了这段代码: #include <stdio.h> #include <stdlib.h> int main() { char numbers[2001]; char a[1000], b[1000]; int int1, int2, i, n = 0; int sum, difference; fgets(numbers, sizeof(numbers), stdin); for (i = 0; i < 10

我写了这段代码:

#include <stdio.h>
#include <stdlib.h>
int main()
{
    char numbers[2001];
    char a[1000], b[1000];
    int int1, int2, i, n = 0;
    int sum, difference;

    fgets(numbers, sizeof(numbers), stdin);

    for (i = 0; i < 1000; i++)
    {
        if (numbers[i] != ' ')
        {
           a[i] = numbers[i];
        }
        else if (numbers[i] == ' ') {
            i += 1;
            b[n] = numbers[i];
            for (n = 1; n < 1000; n++)
                b[n] = numbers[n+i];
        }


    }

    int1=atoi(a);
    int2=atoi(b);

    sum = int1 + int2;
    difference = int1 - int2;
    printf("%d\n%d", sum, difference);

    return 0;
 }
输出:

57
33
147
-75
14
4
159
147

您可以使用
sscanf
从字符串中获取数字,它更简单:

    FILE * fp = fopen("input.txt", "r");
    if (!fp) {
       return -1;
    }
    int i = 0;
    while(fgets(numbers, sizeof(numbers), fp)) {
        sscanf(numbers, "%d %d", &a[i], &b[i]);
        printf("sum = %d\n", a[i]+b[i]);
        printf("diff = %d\n", abs(a[i] - b[i]));
        i++;
    }

对于较大的数字,应将
a
b
的类型从
char
更改为
int

int a[1000], b[100];
因为我的代码中的数字是输入文件的行,它的内容是2个数字,所以您可以减小其大小:

char numbers[256]; // for example.
完整的测试程序:

int main(void) {
    char numbers[256];
    int a[1000], b[1000];
    FILE * fp = fopen("input.txt", "r");
    if (!fp) {
       return -1;
    }
    int i = 0;
    while(fgets(numbers, sizeof(numbers), fp) && i < 1000) {
        sscanf(numbers, "%d %d", &a[i], &b[i]);
        i++;
    }

    for(int j = 0, j < i; j++) {
        printf("%d %d\n", a[j], b[j]);
        printf("sum = %d\n", a[j]+b[j]);
        printf("diff = %d\n", abs(a[j] - b[j]));
    }
    return 0;
}

a
b
不再需要是数组。如果将它们都设置为
int
,还可以去掉
i
,并消除输入文件超过1000行时出现的问题。检查
sscanf
的返回值以确保它解析了两个整数可能没有什么坏处。我们可以将
a
b
作为
int
类型。可能,OP需要存储“执行其他操作”的值,因此我保留数组
a
b
。我同意您限制行数并检查
sscanf
的返回值。我只想举个例子。顺便说一句,谢谢你的评论。非常感谢!但是我希望在所有输入之后输出,而不是在第一次输入之后。我的意思是,输入应该是几行,每一行的输出应该在之后给出。我不明白怎么做所有的值都存储在两个数组a和b中。所以,如果您在输入之后打印输出,那么让我们在while循环之后打印它
int main(void) {
    char numbers[256];
    int a[1000], b[1000];
    FILE * fp = fopen("input.txt", "r");
    if (!fp) {
       return -1;
    }
    int i = 0;
    while(fgets(numbers, sizeof(numbers), fp) && i < 1000) {
        sscanf(numbers, "%d %d", &a[i], &b[i]);
        i++;
    }

    for(int j = 0, j < i; j++) {
        printf("%d %d\n", a[j], b[j]);
        printf("sum = %d\n", a[j]+b[j]);
        printf("diff = %d\n", abs(a[j] - b[j]));
    }
    return 0;
}
#cat input.txt
12 45
36 111
9 5
153 6

./test
12 45
sum = 57
diff = 33
36 111
sum = 147
diff = 75
9 5
sum = 14
diff = 4
153 6
sum = 159
diff = 147