c -正确编写嵌套的while命令,没有错误


#include <stdio.h>
int main() {
// variables
int door,base;
char ch;
int a,b,bin;
int converter,converterC,controller = 0;
printf("Welcome to Full Subtractor!n");
printf("t(1)tCompute and Display the outputsn");
printf("t(2)tQuit n");
printf("You choose:");
scanf("%d",&door);
while(door == 1)
{
printf("nYou have chosen option %dn",door);
printf("Which base will you use to enter input (base 2 or base 16)? ");
scanf("%d",&base);
while(base == 2)
{
printf("Please enter your input: ");
fflush(stdin);
while(ch!= 'n')
{
scanf("%c", &ch);
converter = ch - '0'; // convert char to int
converterC = converterC+1;
controller = controller+1;
if(converterC == 0)
{
a = converter;
}
else if(converterC == 1)
{
b = converter;
}
else if(converterC == 2)
{
bin = converter;
}

}

if(controller <=3)
{
printf("nYou entered less than 3 bits! Please try again!n");
break;
}
else if(controller > 4)
{
printf("nYou entered more than 3 bits! Please try again!n");
break;
}
}
while(base == 16)
{
printf("xxxxx");
}
}
return 0;
}

我希望输出是这样的,但这不能正常工作:

欢迎使用Full Subtractor!

(1)计算并显示输出(2)退出你的选择您已选择选项1

您将使用哪个进制输入(以2为基数还是以16为基数)?2请输入您的输入:111D = 1, Bout = 1

欢迎使用Full Subtractor!

(1)计算并显示输出(2)退出你的选择您已选择选项1

您将使用哪个进制输入(以2为基数还是以16为基数)?2请输入input: 22以2为基数的数字无效!请再试一次!请输入输入:1110001您输入了超过3位!请再试一次!请输入输入:E以2为基数的数字无效!请再试一次!请输入您的输入:011D为0,约为1

我想把每个ch和转换成int,我将使用一个一个地计算,但是这个while循环不能正常工作我的输出:欢迎使用Full Subtractor!(1)计算并显示输出(2)辞职你选择:1

您选择了选项1您将使用哪种进制来输入(以2为底还是以16为底)?2请输入您的输入请输入输入:您输入的数据少于3位!请再试一次!

您选择了选项1您将使用哪种进制来输入(以2为底还是以16为底)?2

您输入的小于3位!请再试一次!

您选择了选项1您将使用哪种进制来输入(以2为底还是以16为底)?

——或者欢迎使用Full Subtractor!(1)计算并显示输出(2)辞职你选择:1

您选择了选项1您将使用哪种进制来输入(以2为底还是以16为底)?2请输入输入:0000请输入您的输入:Please ent请输入您的输入:请输入您的输入:您输入了超过3位!请再试一次!

您选择了选项1您将使用哪种进制来输入(以2为底还是以16为底)?

我想让它再次请求输入。禁止使用BTW数组和操作符。我怎样才能解决这个问题呢?

对于初学者来说,fflush的调用

fflush(stdin);

有未定义的行为。

变量ch未初始化

char ch;

那么这个while loop

while(ch!= 'n')

调用未定义行为。

同样的问题也存在于变量converterC中,该变量也未初始化并在此语句中使用

converterC = converterC+1;
代码的另一个问题是,在输入 之后
scanf("%d",&base);

输入缓冲区包含新的行字符'n',对应于按下的回车键。

那么scanf

的调用
scanf("%c", &ch);

立即读取新的行字符。

在while循环之前,您可以再插入一个循环,以从输入缓冲区中删除新的行字符'n',如

while ( getchar() != 'n' );

原来的while循环最好重写为无限while循环,例如

while (getchar() != 'n');

while( 1 )
{
if ( scanf("%c", &ch) != 1 || ch == 'n' ) break;
//...
}

并且不要忘记在每次进入while循环之前将变量converterCcontroller初始化为零。

相关内容

  • 没有找到相关文章

最新更新