我的程序不接受scanf命令的输入

问题描述 投票:-2回答:2
#include <stdio.h>

void aeins(){

    int x;
    unsigned int y;
    double z;

    printf("Geben sie einen ganze Zahl ein: ");
    scanf("%d", &x);
    printf("Geben sie eine natürliche Zahl ein: ");
    scanf("%u", &y);
    printf("Geben sie eine reelle Zahl ein: ");
    scanf("%lf", &z);

    printf("Die dritte Potenz von %d ist %d", x, x*x*x);
    printf("Die dritte Potenz von %u ist %u", y, y*y*y);
    printf("Die dritte Potenz von %lf ist %lf", z, z*z*z);

}

void azwei(){

    printf("Geben sie einen Character ein: ");
    char c = getchar();
    printf("Das nachfolgende Zeichen lautet: %c und der ASCII-Wert ist: ", c+1, c+1);

}

int main (void){

    int a;
    int b = 1;

    while(b){
        printf("Welche Aufgabe soll gezeigt werden? ");
        printf("\n(1) Aufgabe 1 \n(2) Aufgabe 2\n");
        scanf("%d", &a);

        switch(a){
            case 1: aeins();
                    b = 0; break;
            case 2: azwei();
                    b = 0; break;
            default: printf("Falsche Eingabe!\n"); break;
        }
    }
}

这是我的程序,这是我的输出:

Welche Aufgabe soll gezeigt werden?
(1) Aufgabe 1
(2) Aufgabe 2
2
Geben sie einen Character ein: Das nachfolgende Zeichen lautet:  und der ASCII-Wert ist:
Process returned 0 (0x0)   execution time : 2.172 s
Press any key to continue.

您可以看到我的程序正在忽略getchar命令。我已经尝试过使用scanf命令,但它也无法正常工作。在功能aeins中,所有功能均可用。如果可以,我会说我是中级C程序员的初学者。

c function output scanf getchar
2个回答
2
投票

[scanf具有有趣的属性,它将换行符留在输入缓冲区中,终止了输入,因此在进行任何其他输入之前,需要先消耗掉换行符。

只需在getchar()之后添加一个scanf("%d", &a);通话,您就应该不错。


2
投票

您可以使用scanf(" %c",&c);来解决问题,或者您需要再写1个getchar()来使用scanf("%d", &a);剩余的换行符

© www.soinside.com 2019 - 2024. All rights reserved.