使用getchar()来存储数字

时间:2015-04-07 05:36:49

标签: c math calculator getchar putchar

我有一个任务,我应该在C中创建一个简单的算术计算器,它接受一个数字,一个运算符和一个第二个数字的输入并执行操作并输出它。听起来很简单吧?

我仅限于使用getchar()和putchar()来输入数字。这意味着我必须一次读取整个输入一个字符...而我对如何读取一个数字的两个字符(例如91的'9'和'1')作为一个数字感到困惑。如果从右到左阅读getchar(),这将是一个不同的故事。但不幸的是,它不是......

我很感激任何指针!

3 个答案:

答案 0 :(得分:5)

这是一些伪代码: c = getchar() num = 0 while isdigit(c) num = (num * 10) + (c - '0') c = getchar()

这会累积数字,识别右边的每个新数字有效地将已经看到的数字乘以10.当看到非数字时停止累积,因此解析字符串如 91 + 3 的工作原理。

答案 1 :(得分:0)

如果每个输入都是分开的,那么你可以尝试使用循环。

char c = getchar();
int num = 0;
int neg = 0;

if(c == '-') {
   neg = 1;
   c = getchar();
}

while(isdigit(c)) {
    num = num * 10;
    num = num + (c - '0');
    c = getchar();
}

if(neg) {
    num = num * -1;
}

基本上你一次累积每个头号字符。 但是,你需要为接下来的角色腾出空间。因此,您需要将数字乘以10,将其向左移1位数。

答案 2 :(得分:-1)

定义ENTER' \ n'

int read_num()
{
    int num = 0;
    int c;

    c = getchar() - '0';
    num = (c < 0) ? 0 : c;

    while ((c = getchar()) != ENTER) {
        c -= '0';
        num *= 10;
        num = (num == 0 || num < 0) ? num - c: num + c;
    }

    return num;
}

PS:新代码

#include <stdio.h>

int readnum()
{
    unsigned int c;
    int num = 0;
    int dec;
    int sign = 0;

    while ( (c = getchar()) != '\n') {

        dec = c - '0';
        if ( dec >= 0 && dec <= 9) {
            num *= 10;
            num = (sign == 1 || num < 0) ? num - dec: num + dec;
        } else if (c == '-') {
            sign = 1;
        } else if (c == '+')
            sign = 0;

    }
    return num;
}

int main()
{
    printf("%d\n", readnum());
    return 0;
}

其他解决方案:

#define ENTER '\n'

int read_num()
{
    int num = 0;
    int c;
    int signal = 1;

    while ((c = getchar()) != ENTER) {

        if (signal == 1 && (c == '-' || c == '+')) {
                signal = (c == '-') ? -1 : 1;
        } else {
            num = num * 10 + (c - '0');
        }
    }

    return num * signal;
}
相关问题