如何检查变量是否不是某物
How to check if variable is NOT something
基本上我想检查 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 的理解允许我创建的,但它不能正常工作,它只是循环:
回答错误,重试
"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");
};
如评论中所建议,您应该使用 &&
运算符而不是 ||
来检查 a
是否既不是 'y'
也不是 'n'
if((a!='y') && (a!='n')){
printf("Incorrect awnser, try again\n");
}
}while((a!='y') && (a!='n'));
条件 ((a!='y') || (a!='n'))
永远为真,因为 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
的初始值是无关紧要的,因为 a
的新值是在 [= 的开头读入的25=] 并且对 a
所做的任何更改都不会在 main()
中产生任何影响,因为参数是按值传递的,而 yesno()
没有 return 值。
所以,与其将 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'));
}
然后这样称呼它
yesno();
在 main()
.
您可以在 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 部分。
基本上我想检查 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 的理解允许我创建的,但它不能正常工作,它只是循环: 回答错误,重试
"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");
};
如评论中所建议,您应该使用 &&
运算符而不是 ||
来检查 a
是否既不是 'y'
也不是 'n'
if((a!='y') && (a!='n')){
printf("Incorrect awnser, try again\n");
}
}while((a!='y') && (a!='n'));
条件 ((a!='y') || (a!='n'))
永远为真,因为 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
的初始值是无关紧要的,因为 a
的新值是在 [= 的开头读入的25=] 并且对 a
所做的任何更改都不会在 main()
中产生任何影响,因为参数是按值传递的,而 yesno()
没有 return 值。
所以,与其将 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'));
}
然后这样称呼它
yesno();
在 main()
.
您可以在 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 部分。