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

vid*_*ngs 1 c scanf getchar

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

#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;
    }
Run Code Online (Sandbox Code Playgroud)

das*_*ght 5

这是正确的行为getchar.虽然scanf%d格式说明符的数字序列转换为十进制数,与getchar你需要自己做.

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

  1. 当数字序列结束时,
  2. 如何将数字的ASCII码转换为数字,和
  3. 如何将多个数字组合成一个数字.

以下是答案:

你可以决定结束字符输入时,返回的值getchar不是一个数字.您可以使用该isdigit功能(包括<ctype.h>标头使用它).

您可以通过'0'从返回的值中减去零(即)的代码,将单个数字字符转换为其对应的数字值getchar

您可以通过在零处开始部分结果,然后将其乘以10,并将下一个数字的值添加到数字中,将多个数字组合成一个数字.

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