如何正确使用scanf和char?
这是一个简单的代码,可以打印6个数字,然后询问用户是否要继续,但在某些情况下,我的继续标志的值会发生变化。有什么想法吗? do while块末尾的while是否只接受一个条件 代码如下:如何正确使用scanf和char?,c,char,scanf,do-while,C,Char,Scanf,Do While,这是一个简单的代码,可以打印6个数字,然后询问用户是否要继续,但在某些情况下,我的继续标志的值会发生变化。有什么想法吗? do while块末尾的while是否只接受一个条件 代码如下: void x(){ int i = 1, cont = 0; char flag; do{ if(cont == 6 && (flag != 'n' || flag != 'N')){ printf("(S/N)");
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');
}
你必须更换
scanf("%c", &flag);
与
为避免扫描空白族[此处为上次按ENTER键时存储在输入缓冲区中的\n
]
接下来,你必须重新思考逻辑。我不明白再次检查输入的目的是什么。嗯,没必要。如果我正确理解了您的目的,您可以像下面这样重新编写代码
#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
}
#包括
#包括
int main(){
int i=1,cont=0;
字符标志;
做{
如果(cont==6&&(flag!='n'| | flag!='n')){
printf(是/否);
scanf(“%c”,&flag);//忽略whilespace族
printf(“\n:%c\n”,标志);
if(flag='y'| | flag='y')//检查y或y并继续下一组打印
{
cont=0;
printf(“\n”);
}
else if(flag='n'| | flag='n')//检查n或n并中断循环
打破
其他的
printf(“无效选择\n”);//再次询问输入
}否则{
printf(“%d”,i);
i++;
cont++;
}
}while(1);//无限循环
}
第一次输入标志后,还可以在stdin缓冲区中输入\n
字符。这导致了问题。如果返回,则应测试scanf
返回值和break
,如果返回!=1
。
#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
}