问题出在这个函数中。它应该验证两个变量的输入为整数。我做错了什么? O__O谢谢:)代码在while循环中scanf后崩溃
我使用了一个if else语句来检查有效变量的变化,以便在给定正确的输入后它将退出循环。即使我输入正确的值,代码仍然崩溃。
void input(int *n1, int *n2, char *opt)
{
int valid = 0;
int v2 = 0;
char choice;
int a, b;
while (v2 == 0)
{
printf("Enter first number: \n");
if(scanf("%d", &a) == 1)
{
while(v2 == 0)
{
printf("Enter second number: \n");
if(scanf("%d", &b) == 1)
{
v2 =1;
getchar();
}
else
{
getchar();
printf("Invalid input!\n");
}
}
getchar();
}
else
{
getchar();
printf("Invalid input!\n");
}
}
while(valid == 0)
{
printf("Addition -> 1\nSubtraction -> 2\nMultiplication -> 3\nDivision -> 4\nReset -> R\nExit -> E\n");
scanf("%c", &choice);
if (choice == 'r' || choice == 'e')
{
choice = toupper(choice);
}
if ((choice == '1') || (choice == '2') || (choice == '3') || (choice == '4') || (choice == 'R') || (choice == 'E'))
{
valid = 1;
}
else
{
printf("Invalid input!\n\n");
}
}
*opt = choice;
*n1 = a;
*n2 = b;
}
下面是整个代码供参考。早些时候的答案能够解决这个问题。现在,循环不会退出,或者它不能正常工作。
#include <stdio.h>
#include <ctype.h>
int add(int n1, int n2);
int subtract(int n1, int n2);
int multiply(int n1, int n2);
int divide(int n1, int n2);
void input(int *n1, int *n2, char *opt);
int main(void)
{
int n1, n2, ret;
char opt;
start:
input(&n1, &n2, &opt);
switch(opt)
{
case '1':
ret = add(n1, n2);
printf("The sum is %d\n", ret);
break;
case '2':
ret = subtract(n1, n2);
printf("The difference is %d\n", ret);
break;
case '3':
ret = multiply(n1, n2);
printf("The product is %d\n", ret);
break;
case '4':
ret = divide(n1, n2);
printf("The quotient is %d\n", ret);
break;
case 'R':
goto start;
break;
case 'E':
printf("Goodbye!\n");
return 0;
break;
}
goto start;
}
void input(int *n1, int *n2, char *opt)
{
int valid = 0;
int v2 = 0;
char choice;
int a, b;
while (v2 == 0)
{
printf("Enter first number: \n");
if(scanf("%d", &a) == 1)
{
while(v2 == 0)
{
printf("Enter second number: \n");
if(scanf("%d", &b) == 1)
{
v2 =1;
getchar();
}
else
{
getchar();
printf("Invalid input!\n");
}
}
getchar();
}
else
{
getchar();
printf("Invalid input!\n");
}
}
while(valid == 0)
{
printf("Addition -> 1\nSubtraction -> 2\nMultiplication -> 3\nDivision -> 4\nReset -> R\nExit -> E\n");
scanf("%c", &choice);
if (choice == 'r' || choice == 'e')
{
choice = toupper(choice);
}
if ((choice == '1') || (choice == '2') || (choice == '3') || (choice == '4') || (choice == 'R') || (choice == 'E'))
{
valid = 1;
}
else
{
printf("Invalid input!\n\n");
}
}
*opt = choice;
*n1 = a;
*n2 = b;
}
int add(n1, n2)
{
int result;
result = (n1+n2);
return result;
}
int subtract(n1, n2)
{
int result;
result = (n1-n2);
return result;
}
int divide(n1, n2)
{
int result;
result = (n1/n2);
return result;
}
multiply(n1, n2)
{
int result;
result = (n1*n2);
return result;
}
你尝试调试器中运行这些? – alk
如果你的意思是像在CMD,是的。我也试图自己找到它。 :D – fixotherm
不,我的意思是使用调试器:https://en.wikipedia.org/wiki/Debugger – alk