我正在尝试检查用户是否输入了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。
答案 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);
当您使用错误的格式说明符时,会调用未定义的行为。
此处answer
是char
所以,请改为使用:
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()进行比较而不是==。