【问题标题】:Program not returning scanned character程序不返回扫描字符
【发布时间】:2016-10-16 00:28:26
【问题描述】:

所以在我的课堂上,家庭作业的一部分是有一个函数可以返回一个已输入的字符。

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

#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,程序告诉我这个字符是一种奇怪的时髦字体。

我的作业中的实际代码,或者更确切地说是其中的一个 sn-p,是

#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 函数甚至不等待我输入任何内容,它只是显示提示要求 y/n 响应,然后继续下一行代码,而不是等待用户输入并假设没有回应。

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

【问题讨论】:

  • 不要在 % 和 c 之间放置空格。
  • 你到处注入随机空间。为什么?

标签: c char scanf


【解决方案1】:

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

这一行:

scanf("% c", &z);

需要这样:

scanf("%c", &z);

【讨论】:

  • 这解决了我的示例代码和我发布的 sn-p 中的问题,但是当我尝试将此更改应用于我的实际作业代码时,代码并没有让我输入任何内容,而是只是在不让我输入任何内容的情况下发布提示。我的原始帖子已被编辑以包含我的作业代码。
  • Appologies,而不是编程只是跳过输入,它实际上只是崩溃。
  • 我假设您也修复了scanf("% lf", &amp;val); 行,对吧?
  • 另外,您的 readNumber 函数调用了两次 scanf。所以我必须输入两次数字才能让该函数返回。
猜你喜欢
  • 1970-01-01
  • 2017-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-20
  • 2020-07-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多