使用getchar()而不是scanf()的麻烦

时间:2014-05-07 18:20:20

标签: c scanf getchar

我在进行C编程练习时遇到了麻烦。我需要使用getchar() - 方法而不是scanf()。当我使用scanf时,当我输入例如7时,一切都很完美。但是当我使用getchar()并输入7时,我将得到7的ASCII码,而不是int 7.如何解决这个问题? / p>

#include <stdio.h>
    #include <stdlib.h>

    int main(void) {
        int i;

        printf("Voer een getal in:\n");
        fflush(stdout);

        i = getchar();
        //scanf("%d", &i);

        if (i > -1000 && i < +1000) {
            printf("het ingevoerde getal is: %d\n", i);
        } else {
            printf("foutieve invoer\n");
        }

        return EXIT_SUCCESS;
    }

1 个答案:

答案 0 :(得分:5)

这是getchar的正确行为。虽然scanf&#39; %d格式说明符会将数字序列转换为十进制数,但需要getchar,您需要自己执行此操作。

为了做到这一点,你需要知道三件事:

  1. 当数字序列结束时,
  2. 如何将数字的ASCII码转换为数字,
  3. 如何将多个数字合并为一个数字。
  4. 以下是答案:

    getchar返回的值数字时,您可以决定结束字符输入。您可以使用isdigit函数(包含<ctype.h>标题来使用它)。

    您可以通过从'0'

    返回的值中减去零代码(即getchar),将单个数字字符转换为相应的数字值

    您可以将多个数字组合成一个数字,方法是将零部分结果设为零,然后将其乘以10,然后将下一个数字的值加到该数字上。

    int num = 0;
    for (;;) {
        int ch = getchar();
        if (!isdigit(ch)) break;
        num = 10 * num + (ch - '0');
    }