C++ 案例中的运行时检查错误3

C++ 案例中的运行时检查错误3,c++,c,C++,C,我已经把程序弄明白一半了,除了当我去立方体一个数字/平方一个数字/显示奇数或偶数而不输入一个数字,而不是简单地说“你没有输入一个数字”时,我得到一个运行检查错误#3,然后是一个非常大的负数。这显然不是我想要的 #include<stdlib.h> #include<stdio.h> //begin function int main () { //declare variables int choice; int number = 0; int cubed; int

我已经把程序弄明白一半了,除了当我去立方体一个数字/平方一个数字/显示奇数或偶数而不输入一个数字,而不是简单地说“你没有输入一个数字”时,我得到一个运行检查错误#3,然后是一个非常大的负数。这显然不是我想要的

#include<stdlib.h>
#include<stdio.h>


//begin function
int main ()
{

//declare variables
int choice;
int number = 0;
int cubed;
int squared;

//menu and begin do while loop
do {


printf("***********************\n");
printf("--Main Menu---\n");
printf("***********************\n");
printf("1.Enter a number\n");
printf("2.Cube the number\n");
printf("3.Square the number\n");
printf("4.Display Even or Odd\n");
printf("5.Quit\n");

printf("Enter your choice:   ");
scanf("%i", &choice);

printf("Your current number is: %i \n", number);

//begin switch and functions
switch(choice){

 case 1: 
      printf("Enter a number\n");
      scanf("%i", &number);
break;

case 2:  

      if (number == 0)
      printf("You have not entered a number\n");
      else 
      cubed= number * number * number;
      printf("Your number cubed is: %i \n", cubed);
break;

case 3:
       if (number == 0)
       printf("You have not entered a number\n");
       else
       squared=  number * number;
       printf("Your number squared is: %i \n", squared);
break;
case 4:
      if (number == 0)
       printf("You have not entered a number\n");
       else if
      (number % 2 ==0)
      printf("Your number squared is even!\n");

      else 

      printf("Your number is odd!\n");

break;

case 5:
      printf("Goodbye!!!!\n");
system("pause");
break;

default:
      printf("Was not 1 through 5\n");
break;
}// end switch and functions








} while (choice!=5); 


} //end function
#包括
#包括
//开始功能
int main()
{
//声明变量
智力选择;
整数=0;
整数立方;
整数平方;
//菜单并开始边做边循环
做{
printf(“***************************\n”);
printf(“--主菜单--\n”);
printf(“***************************\n”);
printf(“1.输入一个数字\n”);
printf(“2.1”是数字\n);
printf(“3.将数字平方\n”);
printf(“4.显示偶数或奇数”);
printf(“5.退出\n”);
printf(“输入您的选择:”);
scanf(“%i”和“选择”);
printf(“您当前的号码是:%i\n”,号码);
//开始开关和功能
开关(选择){
案例1:
printf(“输入数字”);
scanf(“%i”和编号);
打破
案例2:
如果(数字==0)
printf(“您尚未输入数字”);
其他的
立方=数字*数字*数字;
printf(“您的数字立方是:%i\n”,立方);
打破
案例3:
如果(数字==0)
printf(“您尚未输入数字”);
其他的
平方=数字*数字;
printf(“您的平方数是:%i\n”,平方);
打破
案例4:
如果(数字==0)
printf(“您尚未输入数字”);
否则如果
(数字%2==0)
printf(“您的数字平方是偶数!\n”);
其他的
printf(“您的号码是奇数!\n”);
打破
案例5:
printf(“再见!!!!\n”);
系统(“暂停”);
打破
违约:
printf(“不是1到5”\n);
打破
}//终端开关及其功能
}while(选项!=5);
}//结束函数

GIGO又名垃圾输入垃圾输出。(或者更准确地说是“未定义的行为”)


您从未设置
number
(因此它有一些随机值),但是您的
if
语句检查
number
,就好像它有一个默认值<0一样。尝试如下设置
number
的默认值:
int number=-1

C不会初始化变量,因此您必须这样做。如果你不初始化,你的变量将等于内存位置的任何值,因此它是不可预测的。在您的情况下,您应该使用负值初始化数字,以强制首先输入数字。整数=-1

为像-1这样的数字或任何负数设置默认值。那么你的代码就可以正常工作。

它在这里起作用:@karma\u geek:未定义的行为表面上可能在某些时候起作用。。。答案中还提到了一个真正的问题。@会话:在调用
scanf
时,您应该检查是否成功,例如
如果(scanf(“%I”,&number)!=1){fprintf(stderr,“您的输入不是有效的数字”\n”);退出(1);}
,否则,键入字母或标点符号的人将不会收到警告。该测试实际上是针对
数字<0
,因此设置为
0
将不起作用(需要例如
-1
INT\u MIN
),但无论如何都要获得我的投票以指出一般问题。我遗漏了什么吗?当我定义变量int number=-1;它仍然做同样的事情。甚至将if语句切换为(number==0),然后定义int number=0;仍然会导致相同的错误。很抱歉,我觉得我遗漏了一些非常明显的东西,我对编程非常陌生尝试在
开关之前打印
数字的值。