如何检查用户输入是否是某个字符

时间:2016-07-09 02:33:10

标签: c if-statement

我正在尝试检查用户是否输入了y或其他内容。

我尝试过创建一个字符串并循环浏览用户输入的内容,但这并不起作用。

char answer[] = "n";
for(int i = 0; i < sizeof(answer)/4; i++) {
    if(answer[i] == "y") {
       calculatorPrompt();
    } else if(answer[i] === "n") {
              printf("Okay, bye!");
              System(100);
    }
}

这是我的代码(我确定它在if语句中崩溃了):

printf("Thanks for that\nDo you want a calculator?(y/n)");
char answer = 'n';
scanf("%s", answer);
    if(answer == 'y') {
        calculatorPrompt();
    } else if(answer == 'n') {
        printf("Okay bye!");
        Sleep(100); //wait for 100 milliseconds
    }

calculatorPrompt()功能:

void calculatorPrompt() {
int a = 0;
int b = 0;
int sum = 0;
printf("Enter your first number: ");
if(scanf("%d\n", a) != 1) {
    checkNumber();
} else {
    printf("Enter your second number: ");
    if(scanf("%d\n", b) != 1) {
        checkNumber();
    } else {
        sum = calculate(a, b);
        printf("Your answer is: %d", sum);
    }
}

}

calculate()功能:

int calculate(int a, int b) {
    return a + b;
}

checkNumber()功能:

void checkNumber() {
    printf("Really? You didn't enter a number... Now exiting..");
    return;
}

我已加入<windows.h> <stdio.h><stdbool.h>

我也很困惑它崩溃的原因。

该程序的返回值为-1,073,741,819。

4 个答案:

答案 0 :(得分:2)

  

代码中的scanf()语句存在多个问题:

  • calculatorPrompt()代码的功能中,您使用:

    if(scanf("%d\n", a) != 1) //wrong : sending variable as argument
    
  • 这是错误的,因为你需要发送address of the variable作为参数而不是variable本身作为参数。

    if(scanf("%d", &a) != 1) //correct : sending address as argument
    
  • 同样在代码中扫描其他integers时进行更改。

这里,

char answer = 'n';
scanf("%s", answer);
  • 当您使用错误的格式说明符时,会调用未定义的行为

  • 此处answerchar所以,请改为使用:

    scanf(" %c", &answer); //space to avoid white spaces
    

正如我在评论中已经建议的那样:

  • 您在i < sizeof(answer)/4循环
  • 中使用for
  

没有!它必须是i < sizeof(answer),因为在一个字符串中,每个元素只占1个字节而不是4 (你错误地认为它是 int 阵列)

顺便提一下,您的代码中没有字符串

答案 1 :(得分:0)

我不推荐您为计算器编写的代码,但希望帮助您找到工作代码。请尝试以下基于您自己的代码的代码。希望您能看到差异,并了解程序崩溃的原因。

#include <Windows.h>
#include <stdio.h>
#include <stdbool.h>
bool checkNumber(int num)
{
    return true;
}


int calculate(int a, int b) {
    return a + b;
}

void calculatorPrompt() {
    int a = 0;
    int b = 0;
    int sum = 0;
    printf("Enter your first number: ");
    scanf_s("%d", &a);
    if (checkNumber(a)) {
    }

    printf("Enter your second number: ");
    scanf_s("%d", &b);
    if (checkNumber(b)) {
    }

    sum = calculate(a, b);
    printf("Your answer is: %d", sum);

}

int main()
{
    printf("Thanks for that\nDo you want a calculator?(y/n)");
    char answer = 'n';
    scanf_s("%c", &answer);
    if (answer == 'y') {
        calculatorPrompt();
    }
    else if (answer == 'n') {
        printf("Okay bye!");
        Sleep(100); //wait for 100 milliseconds
    }
}   

答案 2 :(得分:0)

#include <windows.h>
#include <stdio.h>
#include <stdbool.h>

void calculatorPrompt(void);

int main(void){
    printf("Thanks for that\nDo you want a calculator?(y/n)");
    char answer = 'n';
    scanf("%c", &answer);//scanf need address of store place
    if(answer == 'y') {
        calculatorPrompt();
    } else if(answer == 'n') {
        printf("Okay bye!\n");
        Sleep(100); //wait for 100 milliseconds
    }
    return 0;
}

void checkNumber(void);
int calculate(int a, int b);

void calculatorPrompt() {
    int a = 0;
    int b = 0;
    int sum = 0;
    printf("Enter your first number: ");
    if(scanf("%d", &a) != 1) {//\n : skip white spaces and wait input not spaces
        checkNumber();//call when invalid input
    } else {
        printf("Enter your second number: ");
        if(scanf("%d", &b) != 1) {
            checkNumber();
        } else {
            sum = calculate(a, b);
            printf("Your answer is: %d\n", sum);
        }
    }
}

void checkNumber(void){//output message and clear input.
    fprintf(stderr, "invalid input!\n");
    scanf("%*[^\n]%*c");//clear upto end of line.
}

int calculate(int a, int b) {
    return a + b;
}

答案 3 :(得分:0)

扫描角色时,只需使用%c即可。如果您打算继续使用字符串,则必须使用strcmp()进行比较而不是==。