Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 函数调用后通过“我的if-else”运行的程序_C - Fatal编程技术网

C 函数调用后通过“我的if-else”运行的程序

C 函数调用后通过“我的if-else”运行的程序,c,C,我有一个C语言的课堂作业,用来制作一个简单的计算器,它可以执行三种计算。我还没有完成所有的函数,但是我的calcMenu函数有问题。调用该函数时,程序运行所有if-else语句,我不知道,只执行else语句,这是错误检查。然后再次运行该函数,这是预期的,但这次它不会运行所有if-else语句,并允许用户进行选择。我知道我做了一些非常愚蠢的事情,但在最后一个小时里我一直在绞尽脑汁。如果有人要找我,请给我指出正确的方向。我知道所有的系统调用都会让一些人感到厌烦,但这是一门基础课,我们的老师告诉我们要

我有一个C语言的课堂作业,用来制作一个简单的计算器,它可以执行三种计算。我还没有完成所有的函数,但是我的calcMenu函数有问题。调用该函数时,程序运行所有if-else语句,我不知道,只执行else语句,这是错误检查。然后再次运行该函数,这是预期的,但这次它不会运行所有if-else语句,并允许用户进行选择。我知道我做了一些非常愚蠢的事情,但在最后一个小时里我一直在绞尽脑汁。如果有人要找我,请给我指出正确的方向。我知道所有的系统调用都会让一些人感到厌烦,但这是一门基础课,我们的老师告诉我们要使用它们

提前感谢,

迈克

#包括
#包括
#包括
#定义暂停系统(“暂停”)
#定义cls系统(“cls”)
//这里的原型计算函数
void evenOrOdd(int userNumber);
void squareNum(int userNumber);
void cubeNum(int userNumber);
void calcMenu(int userNumber);
void main(){
//在这里声明局部变量
int userNumber=0;
printf(“\t\t\t惊人的三功能计算器\n\n\n”);
printf(“请输入要计算的整数”\n);
scanf(“%d”、&userNumber);
calcMenu(用户编号);
}
void calcMenu(int userNumber)
{
字符计算选项;
printf(“\n您希望对您的号码执行什么计算?\n\n”);
printf(“按A”)检查您的号码是偶数还是奇数。\n\n“;
printf(“按B.)计算数字的平方。\n\n”);
printf(“按C.)计算数字的立方体。\n\n”);
printf(“按D.)退出程序。\n”);
scanf(“%c”和“计算选项”);
calculateOption=toupper(calculateOption);
如果(calculateOption='A')
{
evenOrOdd(用户编号);
}
else if(calculateOption='B')
{
squareNum(用户编号);
}
else if(calculateOption='C')
{
cubeNum(用户编号);
}
else if(calculateOption='D')
{
系统(“cls”);
printf(“感谢您使用我的神奇计算器。\n\n”);
系统(“暂停”);
系统(“退出”);
}
其他的
{
printf(“请输入有效选项”);
calcMenu(用户编号);
}
}
void evenOrOdd(int userNumber){
userNumber=userNumber%2;
如果(userNumber==0)
{
printf(“您的号码是偶数。\n”);
}
其他的
{
printf(“您的号码是奇数。\n”);
}
}
void squareNum(int userNumber){
}
void cubeNum(int userNumber){
}

当您使用
scanf
读取输入时,必须按Enter键使程序继续。您的
scanf
调用从输入中读取单个字符,但将Enter键仍保留在输入缓冲区中,以便下次调用
scanf
时读取

有一个非常简单的技巧可以解决这个问题:在
scanf
格式字符串中
“%c”
之前或之后放置一个空格。这将使
scanf
跳过空白

scanf("%c ", &calculateOption);

如果您使用调试器逐步处理代码,您将很容易看到
calculationoption
将是换行符。

首先,您可以将所有printf语句压缩到一个函数中,以保存额外的调用

接下来,您可能应该缩进您的函数,我不能一眼就知道一个函数从哪里开始,另一个函数从哪里结束

第三,不要使用
系统(“暂停”)
,使用
getchar()

第四,这是可选的,您可能希望将这些if语句转换为switch语句

现在开始回答您的问题。首先,不要使用
scanf(“%c”和&calculateOption)
,只需在这里使用
getchar()
。在本例中,我将按如下方式编写calcMenu():

此外,main应该始终返回一个值<代码>空主是不好的做法


免责声明:代码未经测试,您不应复制/粘贴它。我也不知道你是否被迫使用某些东西…

请学习使用调试器。它将极大地帮助您。函数调用
system(“exit”)并没有真正做到您所期望的。您可能正在寻找函数。谢谢,我不知道为什么我没有想到先使用switch语句,这比if/else语句好得多。我在上一次作业中使用了getchar()来代替系统暂停。我会的。感谢
void main
不仅是一种不好的做法,它实际上是“非法的”,因为标准规定
main
必须返回
int
@MichaelBrooks,在这个主题上,在普通的旧C语言中,一个没有参数的函数声明实际上是在声明一个带有未指定参数的函数。如果您想要一个不包含参数的函数,
main
包含在内,则必须使用
void
参数声明它:
int main(void)
我在visual studio中练习使用调试器。这将有希望防止我每次遇到交通事故时都发布简单的问题。
scanf("%c ", &calculateOption);
int calcMenu(int userNumber){
    printf("\nWhat calculation would you like to perform with your number?\n\n\
    Press A.) to check if your number is even or odd.\n\n\
    Press B.) to calculate the square of your number.\n\n\
    Press C.) to calculate the cube of your number.\n\n\
    Press D.) to exit the program.\n");

    switch(toupper(getchar())){
        case 'A':
            evenOrOdd(userNumber);
            break;
        case 'B':
            squareNum(userNumber);
            break;
        case 'C':
            cubeNum(userNumber);
            break;
        case 'D':
            system("cls"); //this is bad, really.
            printf("Thank You for using my amazing calculator.\n\n");
            getchar();
            return 0;
        default:
            printf("Please enter a valid choice: ");
            calcMenu(userNumber);
            break;
    }
}