这是一个简单的代码,用于打印6个数字然后询问用户是否要继续,但在某些时候我的标志值继续更改。任何的想法? do-while块结束时的while只接受一个条件吗?
以下是代码:
void x(){
int i = 1, cont = 0;
char flag;
do{
if(cont == 6 && (flag != 'n' || flag != 'N')){
printf("(S/N)");
scanf("%c", &flag);
printf("\n :%c \n", flag);
if(flag == 's' || flag == 'S'){
cont = 0;
printf("\n");
}
}else{
printf("%d, ", i);
i++;
cont++;
}
}while(flag != 'n' || flag != 'N');
}
答案 0 :(得分:1)
你必须替换
scanf("%c", &flag);
与
scanf(" %c", &flag);
以避免扫描空白族[此处,\n
存储在输入缓冲区中,从之前的 ENTER 按键]。
接下来,您要重新考虑逻辑。我不明白检查输入agaisnt S
的目的。恕我直言,没有必要。如果我已正确理解您的目的,您可以重新编写如下代码
#include <stdio.h>
#include <stdlib.h>
int main(){
int i = 1, cont = 0;
char flag;
do{
if(cont == 6 && (flag != 'n' || flag != 'N')){
printf("(Y/N)");
scanf(" %c", &flag); //ignore whilespace-family
printf("\n :%c \n", flag);
if(flag == 'y' || flag == 'Y') // check for Y or y and continue the next set to print
{
cont = 0;
printf("\n");
}
else if (flag == 'n' || flag == 'N') // check for n or N and break out of loop
break;
else
printf("Invalid choice\n"); // ask the input again
}else{
printf("%d, ", i);
i++;
cont++;
}
}while(1); // infinite loop
}