【问题标题】:C Checking for EOFC 检查 EOF
【发布时间】:2019-04-23 14:18:17
【问题描述】:

我开发了一个 C 程序来进行整数相加,但我遇到的问题是它需要通过输入文本(非交互式)从标准输入获取输入。但是,经过测试,当它应该适用于多个输入时,我只能让它适用于单行输入,假设这个示例输入都在一个输入文件中((第 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;
}

【问题讨论】:

  • 当你想要ints 时,为什么不使用scanf() 阅读ints? while ((c = (char) getchar()) != '=') 是您的代码只处理第一行的原因。
  • 我需要找到一种方法来拆分输入和退出之间的字符,一旦它达到 =,除非它可以使用 scanf 完成并且仍然可以正常工作。 getchar 似乎更容易,因为它逐个字符地读取。
  • 您必须摆脱首先需要阅读单个字符的误解。你要数字吗?阅读数字。

标签: c


【解决方案1】:

使用 scanf() 你想要的是 4-liner:

#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);
}

【讨论】:

    猜你喜欢
    • 2012-06-18
    • 2010-11-28
    • 1970-01-01
    • 2016-03-23
    • 2011-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-04
    相关资源
    最近更新 更多