C检查EOF

时间:2018-11-21 03:25:51

标签: c

我开发了一个C程序,该程序可以执行整数加法运算,但是我遇到的问题是它需要通过输入文本(非交互式)从stdin中获取输入。但是在测试之后,当它应该适用于多个输入时,我只能让它适用于单个输入行,假设此示例输入全部在单个输入文件中((第1行)123 + 456 =(第2行)999999999 + 1 =)。

我认为这与EOF有关,应该反复进行直到完成。我尝试将EOF放入第一个while循环中,但是输出与应该的输出有很大不同。输入格式必须保持不变,并且不能更改。无论如何,我可以让它进行操作直到输入文件结束?

#include<stdio.h>
#include<stdbool.h>

int main() {
    char c;
    char a[100], b[100], array[101];
    int n = 0;
//It should scan through everyrthing then exit and it think start arround HERE
        while ((c = (char) getchar()) != '=') { 
        array[n] = c;
        putchar(c);
        n++;
    }
    printf("=\n");
    array[n] = '\0';
    int n1 = 0, n2 = -1;
    while (n1 + n2 < n) { //Splits the array into two separate char arrays
        if (array[n1] == '+') {
            n2 = 0;
            n1 += 1;
        }
        if (n2 == -1) {
            a[n1] = array[n1];
            n1++;
        } else {
            b[n2] = array[n1 + n2];
            n2++;
        }
    }
    n1--;
    a[n1] = b[n2] = '\0';
    int i = 0, z = 0, p = 0;
    char array2[101];
    bool val = false;
    while (n1 > 0 || n2 > 0) { //Addition Calculation
        int x = 0, y = 0;
        if (n1 > 0)
            x = a[n1 - 1] - '0';

        if (n2 > 0)
            y = b[n2 - 1] - '0';
        z = x + y;

        if (val)
            z = z + p;

        if (z > 9) {
            p = z % 10;
            array2[i++] = (char) (p + '0');
            p = z / 10;
            val = true;

        } else {
            array2[i++] = (char) (z + '0');
            val = false;
        }
        n1--;
        n2--;
    }
    if (val) {
        array2[i++] = (char) (p + '0');
        array2[i] = '\0';
    }

    for (n = i - 1; n >= 0; n--) { //Print Result
        printf("%c", array2[n]);
    }
    printf("\n");

return 0;
}

1 个答案:

答案 0 :(得分:0)

使用scanf(),您需要的是4衬套:

#include <stdio.h>

int main(void)
{
    int a, b;
    char op, ch;
    while (scanf(" %d %c %d %c", &a, &op, &b, &ch) == 4 && op == '+' && ch == '=')
        printf("%d+%d=%d\n", a, b, a + b);
}