繁体   English   中英

如何编写代码以从输入文件的不同行中读取输入并执行此代码在 C 中执行的相同操作

[英]How to write a code to read input in separate lines from an input file and do the same thing this code does in 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 < 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;
 }

但是输入文件中有几行 2 个数字。 我希望程序找出每一行的和与差并打印出来。

下面是一个输入示例:

12 45
36 111
9 5
153 6

output:

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++;
    }

对于大数,您应该将ab的类型从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;
}

输入和output:

#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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM