基本上,我试图为输入创建一个简单的缓冲区。
如果用户输入的不是字母'R‘或'S',那么do while循环将把代码返回到用户输入字母的位置。
但是,例如,当我尝试输入'Z‘时,循环会重复自己两次,要求在第二个循环上输入。
我不明白为什么,请帮我理解。
我试过..。用时间循环吗?那不管用。我不想用后藤。
<stdio.h>
<stdlib.h>
int main(void)
{
char r_or_s;
printf("Number Reverser/Shuffler v0.1\t");
printf("Written by REN\n");
printf("This program reverses and shuffles the order of numbers.\n\n");
do
{
printf("Would you like to reverse or shuffle numbers? (Press R/S):");
r_or_s = getchar();
printf("\n");
if (r_or_s == 'R')
{
reverseno();
}
else if (r_or_s == 'S')
{
shuffleno();
}
} while (r_or_s != 'R' || r_or_s != 'S');
return 0;
}预期产出
您想颠倒数字还是洗牌?(按R/S):
在拒绝输入之后,但实际输出是:
您想颠倒数字还是洗牌?(按R/S键):您是要倒号还是洗牌?(按R/S):
发布于 2019-02-03 14:32:07
这是因为您输入'Z‘例如,然后您也按下了回车!
那么,你输入了多少个字符?二!
然后,getchar()从标准输入缓冲区中使用“Z”,然后从用户返回读取,但是换行符(Enter)在标准输入缓冲区中等待。
因此,getchar()现在使用换行符,导致“循环重复了两次”。
你也必须考虑到新的行。例如,您可以这样做:
if(r_or_s == '\n')
r_or_s = getchar(); // we read the trailing newline character before, read again此外,当用户输入'R‘或'S’时,您希望停止循环,因此需要更改以下内容:
while (r_or_s != 'R' || r_or_s != 'S');对此:
while (r_or_s != 'R' && r_or_s != 'S');https://stackoverflow.com/questions/54503849
复制相似问题