程序未返回已扫描的字符

时间:2016-10-16 00:28:26

标签: c char scanf

所以在我的课上,家庭作业的一部分就是有一个能够返回已经输入的角色的功能。

我尝试创建此示例代码,但它没有像我希望的那样工作。

#include <stdio.h>     

char readCharacter();

int main(){
    char x;

    x = readCharacter();

    printf("You inputted %c", x);

    return 0;
}

char readCharacter(){
    char z;
    printf("Input character\n");

    scanf("% c", &z);

    return z;
}

我输入一个角色,我决定输入w,程序告诉我这个角色是一些奇怪的时髦字体。

我的作业中的实际代码,或者说是它的片段,是

#include <stdio.h>     // needed by printf, scanf()
#include <ctype.h>     // needed by tolower()
#include <stdlib.h>    // for exit()


double readNumber(char *prompt) {
    double val;

    printf("%s", prompt);

    scanf("% lf", &val);

    //if input is not a number, exit program
    if (scanf("%lf", &val) != 1) {
        printf("Invalid input.\n");
        exit(1);
    }

    return val;
}


char readYesOrNo(char* prompt) {
    char yn;

    printf("%s\n", prompt);

    scanf("% c", &yn);

    return yn;
}



int main() {

    double bonus;
    char yesNo;



    yesNo = readYesOrNo("Did the worker get a bonus ? (y/n) ");

    if (yesNo == 'y' || yesNo == 'Y') {
        bonus = readNumber("Enter bonus: ");
    }
    else {
        bonus = 0;
    }


return 0;
}

在实际的家庭作业代码中,readYesOrNo函数甚至不等我输入任何东西,它只显示询问ay / n响应的提示,然后转到下一行代码,而不是等待用户输入并假设没有响应。

我不知道为什么这不起作用。

1 个答案:

答案 0 :(得分:2)

% c不是有效的格式说明符。但是%c可能就是你的意思。

这一行:

scanf("% c", &z);

需要这样:

scanf("%c", &z);