我希望程序控制用户的输入(必须是字母/字母),但如果我把" xx"它走出了循环,为什么?
char c;
int i = 0;
do{
if(i!=0){
printf("Wrong!\n");
}
printf("Insert char: ");
scanf(" %c", &c);
i++;
}while(c<'a' && c>'z' && c<'A' && c>'Z');
- - - - &GT;编辑/正确
这段代码应该从键盘上读取一个字符(必须是一个字母,无论是小写还是小写),如果不是这样,我会写#34;错误&#34;。 / p>
正如你告诉我的那样我纠正了do / while的条件,现在代码是:
do{
if(i!=0){
printf("Wrong!\n");
}
printf("Insert char: ");
scanf(" %c", &c);
i++;
}while(!((c>='a' && c<='z') || (c>='A' && c<='Z')));
输入示例:
我的期望
会发生什么
如果我没有在scanf中放置空格,那么(&#34;%c&#34;),程序会自动打印我&#34;错误&#34;和&#34;插入char&#34; (它只是循环)
(如果我之前没有很好地解释过这个问题,请向我道歉)
答案 0 :(得分:3)
您的条件
while(c<'a' && c>'z' && c<'A' && c>'Z');
永远不会成真。
但如果我把“xx”放到循环中,为什么?
由于do-while是退出条件循环,因此您第一次进入循环是唯一的时间。
答案 1 :(得分:1)
说明符%c
表示character。因此,您的while
循环会检查单个字符,但您会将string作为输入。
如果您想输入string
,请将scanf
声明更改为:
scanf("%s", &s);
作为说明符%c
表示string
。您需要相应地修改while
循环,以便您的条件在某个时刻变为true
。
答案 2 :(得分:1)
while(c<'a' && c>'z' && c<'A' && c>'Z')
总是假的,这就是原因。
如果是真的:
if(i!=0){ printf("Wrong!\n");}
将始终打印为false(第一次除外)。
我不确切地知道你想要什么。
答案 3 :(得分:0)
你的问题是在这种情况下,它总是错误的。
示例代码:
#include <cstdio>
#include <cctype>
int main ()
{
char c;
do scanf("%c", &c);
while(tolower(c)<'a' || tolower(c)>'z');
printf("%c\n",c);
return 0;
}