#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 outputs\n");
printf("\t(2)\tQuit \n");
printf("You choose:");
scanf("%d",&door);
while(door == 1)
{
printf("\nYou have chosen option %d\n",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;
}
我希望输出是这样的,但这不能正常工作:
欢迎使用全减法器!
(1) 计算并显示输出 (2) 退出 你选择:1 您已选择选项 1
您将使用哪个基数输入(基数 2 或基数 16)? 2个 请输入您的输入:111 D 是 1 Bout 是 1
欢迎使用全减法器!
(1) 计算并显示输出 (2) 退出 你选择:1 您已选择选项 1
您将使用哪个基数输入(基数 2 或基数 16)? 2个 请输入您的输入:22 基数 2 中的数字无效!请再试一次! 请输入您的输入:1110001 您输入了超过 3 位!请再试一次! 请输入您的输入:E 基数 2 中的数字无效!请再试一次!请输入您的输入:011 D 为 0 Bout 为 1
我想分开每个 ch 并转换为 int,我将用于一个一个地计算,但是这个 while 循环不能正常工作 我的输出: 欢迎使用全减法器! (1) 计算并显示输出 (2) 退出 您选择:1
您选择了选项1 您将使用哪个基数输入(基数 2 或基数 16)?2 请输入您的输入:1 请输入您的输入: 您输入的位数少于 3 位!请再试一次!
您选择了选项1 您将使用哪个基数输入(基数 2 或基数 16)?2
你输入的少于3位!请再试一次!
您选择了选项1 您将使用哪个基数输入(基数 2 或基数 16)?
---或 欢迎使用全减法器! (1) 计算并显示输出 (2) 退出 您选择:1
您选择了选项1 您将使用哪个基数输入(基数 2 或基数 16)?2 请输入您的输入:0000 请输入您的输入: 请输入 er 您的输入: 请输入您的输入: 请输入您的输入: 您输入了超过 3 位!请再试一次!
您选择了选项1 您将使用哪个基数输入(基数 2 或基数 16)?
我想要它再次询问输入。顺便说一句,数组和运算符是被禁止的。 我该如何解决?
对于初学者来说,
fflush
fflush(stdin);
有未定义的行为。
变量
ch
没有初始化
char ch;
所以这个 while 循环
while(ch!= '\n')
调用未定义的行为。
变量
converterC
也存在同样的问题,它也没有在这个语句中初始化和使用
converterC = converterC+1;
代码的另一个问题是在这个输入之后
scanf("%d",&base);
输入缓冲区包含对应于按下的 Enter 键的换行符
'\n'
。
所以这个
scanf
的电话
scanf("%c", &ch);
立即读取换行字符。
在 while 循环之前,您可以再插入一个循环以从输入缓冲区中删除换行符
'\n'
like
while ( getchar() != '\n' );
原来的 while 循环最好重写为无限 while 循环,例如
while ( getchar() != ' ');
while( 1 )
{
if ( scanf("%c", &ch) != 1 || ch == '\n' ) break;
//...
}
并且不要忘记在每次进入 while 循环之前将变量
converterC
和 controller
初始化为零。