do while 即使输入正确的值 C 也会不断重复



我想启动一个Y和N问答程序。

#include <stdio.h> 
#include <stdlib.h>
int main(){
char answer[256];
do {
print("nDo you want to delete yourself of the record?n");
scanf("%s", answer);
printf("%s", answer);
}while(answer != "Y" || answer != "N")
;
return 0;
}

如您所见,我声明了一个 char 类型的 256 个元素变量,然后使用 scanf 记录了用户输入并将其存储在 answer 中。然后,只要用户输入大写的 Y 或 N,循环就会一直询问。问题是,通过这种实现,即使我输入 Y 或 N,程序也会不断询问。 我应该将 char 声明更改为单个字符吗?我已经试过了:

#include <stdio.h> 
#include <stdlib.h>
int main(){
char answer;
do {
print("nDo you want to delete yourself of the record?n");
scanf("%c", answer);
printf("%c", answer);
}while(answer != 'Y' || answer != 'N')
;
return 0;
}

但我收到了警告:

warning: format '%c' expects argument of type 'char *', but argument 2 has type int' [-Wformat=]
scanf("%c", answer);

有人对这个问题有澄清吗?

此语句

然后,只要用户输入 大写 Y 或 N。

意味着当用户输入"Y"或"N"时,循环将停止其迭代,不是吗?

这个条件可以写成

strcmp( answer, "Y" ) == 0 || strcmp( answer, "N" ) == 0  

所以对这个条件的否定(当循环将继续迭代时(看起来像

!( strcmp( answer, "Y" ) == 0 || strcmp( answer, "N" ) == 0 )

这相当于

strcmp( answer, "Y" ) != 0 && strcmp( answer, "N" ) != 0  

请注意,您必须比较字符串(使用 C 字符串函数strcmp(,而不是指向它们始终不相等的第一个字符的指针。

所以第一个程序中 do-while 循环中的条件应该是

do {
print("nDo you want to delete yourself of the record?n");
scanf("%s", answer);
printf("%s", answer);
}while( strcmp( answer, "Y" ) != 0 && strcmp( answer, "N" ) != 0 )
;

也就是说应该使用逻辑 AND 运算符。

在第二个程序中,您必须使用像这样的scanf调用

scanf( " %c", &answer);
^^^^   ^

和相同的逻辑 AND 运算符

do {
print("nDo you want to delete yourself of the record?n");
scanf(" %c", &answer);
printf("%c", answer);
}while(answer != 'Y' && answer != 'N')
;

相关内容

  • 没有找到相关文章

最新更新