基本上,我想检查char a
不是'y'
还是'n'
。一直试图找出一个小时,却找不到任何东西。
#include<stdio.h>
int yesno(char a){
do{
printf(":");
scanf("%s",&a);
if((a!='y')||(a!='n')){
printf("Incorrect awnser, try again\n");
}
}while((a!='y')||(a!='n'));
}
int main(){
printf("************************************\n");
printf("*Welcome to 'noname' 0.01 *\n");
printf("*Do you want to start y/n? *\n");
printf("************************************\n");
yesno(1);
return 0;
}
有人可以告诉我该怎么做吗?如何检查是否有东西。 这段代码是我对C的理解允许我创建的代码,但是它无法正常运行,只会循环: 答案不正确,请重试
答案 0 :(得分:1)
"if((a!='y')||(a!='n')){
printf("Incorrect awnser, try again\n");
}"
您可以使用switch-case语句,默认值为printf()语句。
switch(a) {
case 'y':
// do nothing
break;
case 'n':
// do nothing
break;
default:
printf("Incorrect answer, try again\n");
};
答案 1 :(得分:1)
如评论中所建议,您应该使用&&
运算符而不是||
来检查a
既不是'y'
也不是'n'
>
if((a!='y') && (a!='n')){
printf("Incorrect awnser, try again\n");
}
}while((a!='y') && (a!='n'));
条件((a!='y') || (a!='n'))
将始终为true,因为a
和'y'
不能同时为'n'
。
在yesno()
中,a
是一个char
而不是一个能够容纳字符串的char
数组。
所以
scanf("%s",&a);
应该是
scanf("%c",&a);
char
的格式说明符为%c
,而%s
的格式符为字符串。
即使a
是用于存储字符串的char
数组,scanf()
也应该
scanf("%s",a);
C语言中的数组名称会衰减为其基础元素的指针。
您可以取消使用yesno()
的参数,因为a
的初始值无关紧要,因为在{{1}的开头读取了新的a
值},并且对yesno()
所做的任何更改都不会在a
中引起任何反响,因为参数是通过值传递的,而main()
不会返回值。
因此,您可以将其设置为yesno()
的局部变量,如
a
像这样称呼
yesno()
在void yesno(){//or yesno(void)
char a;
do
{
printf(":");
scanf("%c",a);
if((a!='y') && (a!='n')){
printf("Incorrect awnser, try again\n");
}
}while((a!='y') && (a!='n'));
}
中。
答案 2 :(得分:0)
您可以在if条件中使用 continue 和 break 语句。
#include <stdio.h>
int yesno(char a){
do{
printf(":");
scanf("%s",&a);
if((a=='y')||(a=='n')){
break;
}
else{
printf("Incorrect answer, try again\n");
continue;
}
}while((a!='y')||(a!='n'));
}
int main(){
printf("************************************\n");
printf("*Welcome to 'noname' 0.01 *\n");
printf("*Do you want to start y/n? *\n");
printf("************************************\n");
yesno(1);
return 0;
}
我只是更改了if条件,并添加了else部分。