首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我在c程序中关于量热法的错误是什么?

我在c程序中关于量热法的错误是什么?
EN

Stack Overflow用户
提问于 2020-12-12 13:54:57
回答 3查看 55关注 0票数 0

我想问一下我的c程序是不是出了什么问题。我是一名大学新生,我们有一个项目,那就是制作一个对我们的课程有用的程序,这就是为什么我选择了热量学这个话题。我不擅长编程,所以希望有人能帮助我..下面是我的代码。提前谢谢你

代码语言:javascript
复制
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
void shc();
void main(){
    int c=0;
    do{
        printf("\n----------------------\n\nEnter-1 for Quantity of Heat\nEnter-2 for  Mass of Substance\nEnter-3 to Specific Heat Capacity of Material\nEnter-4 for Change in Temperature\n\nEnter-5 to exit\n");
        scanf("%d",&c);
        switch(c){
        case 1:qoh();
                break;
        case 2:mos();
                break;
        case 3:shcm();
                break;
        case 4:cit();
                break;
        case 5:exit(0);
                break;
    }
    }while(!(c==5));

        void qoh(){
        int mos, shcm, cit, qoh;
        printf("Enter Mass of Substance: ");
        scanf("%d",&mos);
    
        printf("Specific Heat Capacity of Material: ");
        scanf("%s", &shcm);

        printf("Change in Temperature: ");
        scanf("%d",&cit);
    
        qoh=(mos*shcm*cit);
        printf("Quantity of Heat:  %d",qoh);
        }
    
        void mos(){
        int mos, shcm, cit, qoh;
        printf("Enter Quantity of Heat: ");
        scanf("%d",&qoh);
    
        printf("Specific Heat Capacity of Material: ");
        scanf("%s", &shcm);

        printf("Change in Temperature: ");
        scanf("%d",&cit);
    
        mos=qoh/(shcm*cit);
        printf("Mass of Substance:  %d",mos);
        }
    
        void cit(){
        int mos, shcm, cit, qoh;
        printf("Enter Mass of Substance: ");
        scanf("%d",&mos);
    
        printf("Specific Heat Capacity of Material: ");
        scanf("%s", &shcm);

        printf("Enter Quantity of Heat: ");
        scanf("%d",&qoh);
    
        cit=qoh/(mos*shcm);
        printf("Quantity of Heat:  %d",qoh);
        }
}
EN

回答 3

Stack Overflow用户

发布于 2020-12-12 14:10:48

问题:

  1. 您的main函数没有右大括号},或者您在文件末尾使用了额外的}

  1. 不要对函数和其中的变量使用相同的名称,所有函数都使用与function同名的变量。

使用int main()

  1. void main()不正确

  1. 您正在使用所有的int变量,所以在scanf中使用%d,不要使用%s (这是用于字符串的)

  1. 您没有schm()的定义,所以在调用中注释,一旦您有了它的定义,就启用它。

正确修改和编辑:

代码语言:javascript
复制
#include<stdio.h>
#include<stdlib.h>
#include<math.h>

void shc();
void mos();
void shcm();
void cit();
void qoh();

int main() {
    int c=0;
    do{
        printf("\n----------------------\n ");
        printf("Enter-1 for Quantity of Heat \n");
        printf("Enter-2 for  Mass of Substance \n");
        printf("Enter-3 to Specific Heat Capacity of Material\n");
        printf("Enter-4 for Change in Temperature\n");
        printf("Enter-5 to exit\n");

        scanf("%d",&c);
        
        switch(c) {
        case 1:
            qoh();
            break;
        case 2:
            mos();
            break;
        case 3:
            //shcm();
            break;
        case 4:
            cit();
            break;
        case 5:
            exit(0);
            break;
        }
    }while(!(c==5));
}

void qoh()
{
    int mos, shcm, cit, qoh1;
    printf("Enter Mass of Substance: ");
    scanf("%d",&mos);
    
    printf("Specific Heat Capacity of Material: ");
    scanf("%d", &shcm);
    
    printf("Change in Temperature: ");
    scanf("%d",&cit);
    
    qoh1=(mos*shcm*cit);
    printf("Quantity of Heat:  %d",qoh1);
}

void mos()
{
    int mos1, shcm, cit, qoh;
    printf("Enter Quantity of Heat: ");
    scanf("%d",&qoh);
    
    printf("Specific Heat Capacity of Material: ");
    scanf("%d", &shcm);
    
    printf("Change in Temperature: ");
    scanf("%d",&cit);
    
    mos1=qoh/(shcm*cit);
    printf("Mass of Substance:  %d",mos1);
}

void cit()
{
    int mos, shcm, cit1, qoh;
    printf("Enter Mass of Substance: ");
    scanf("%d",&mos);
    
    printf("Specific Heat Capacity of Material: ");
    scanf("%d", &shcm);
    
    printf("Enter Quantity of Heat: ");
    scanf("%d",&qoh);
    
    cit1=qoh/(mos*shcm);
    printf("Quantity of Heat:  %d",qoh);
}
票数 0
EN

Stack Overflow用户

发布于 2020-12-12 14:22:54

步骤1:

实际上,助手函数是在main函数中声明的--因为右大括号就在代码的底部。您应该将这个右大括号移到函数定义void qoh()之前。

第2步:

接下来,更改您的main函数的原型,这是无效的C。请参阅this post。最好使用第一个版本--即int main(void);,因为在这种情况下您的代码没有使用参数。此外,由于main的目的是返回一个int,因此您应该实际执行此操作--在main的末尾添加return 0;

第3步:

您的main函数正在调用您的帮助器函数;但是,它们是在您的main函数之后(即下面)定义的。您应该在您的main函数之上添加原型--使用您在顶部已经完成的格式:

代码语言:javascript
复制
void shc(); /* This is a function prototype */

(虽然这似乎在您的代码中没有使用)。

第4步:

正如注释中所提到的,您的一些scanf使用%s格式说明符而不是%d --您在所有情况下都在读取int,所以它们都应该使用%d

第5步:

正如在上面的注释中提到的,您不应该将函数名重用为局部变量。虽然这是可能的,但这是一种糟糕的风格,只会导致混乱。

步骤6:

努力修复代码中的缩进,使其在整个过程中更加一致--它不仅使代码更容易阅读和理解,而且最重要的是,随着您继续工作,它将有助于进一步的调试。

希望这能有所帮助!

票数 0
EN

Stack Overflow用户

发布于 2020-12-12 14:43:21

我看到这个问题现在已经回答了,但是当我看到这个问题的时候,我已经写了大部分,所以我还是要发帖。

以下是一些事情:

1

当它显示implicit declaration of functionundefined reference to时,意味着您使用了编译器以前未见过的变量名、函数名等。在本例中,switch语句中的case调用的是尚未声明的函数。您可以在稍后的代码中声明和定义您的函数,但是编译器会从上到下读取您的代码,因此当它到达函数调用qoh时,例如,它以前没有看到过该函数的声明,因此它抛出一个错误。你可以通过将你的函数定义移到main上面或者(更好的)把函数原型放在main上面(就像你对shc所做的那样)来解决这个问题(如注释中所指出的)。这将告诉编译器该函数将存在,因此它不会抛出错误,但仍然允许您将main放在程序顶部附近(有利于可读性)。您可以通过复制并粘贴函数定义的第一行(例如,将void cit(){粘贴到main之上的程序顶部,并简单地以分号结束,而不是左花括号(同样,就像您对shc所做的那样)来实现此目的。

2

正如在另一个答案中指出的,void main()是不正确的。通常,当函数返回一个值时,该值就可以在调用该函数的任何地方使用,例如,您可以使用int x = func(3)调用一个函数,然后x将等于func的返回值。这对于main是不同的。main的返回值成为程序的退出代码,本质上是程序退出原因的指示器。按照惯例,退出代码为0表示程序成功运行并正常退出。任何其他退出代码都意味着问题(并且,如果您正在编写一个将要分发给用户的程序,则可以在文档中定义每个退出代码的含义)。因此,虽然它与其他函数不同,但main确实返回值,因此您应该用int main()替换void main()。如果您的程序运行成功,您还应该通过将return 0;添加到main的末尾来使main返回0。

3.

main的结束大括号应该在其他函数定义之前。

4.

正如注释和其他答案中所指出的,如果您正在阅读scanfs,请在ints中使用%d而不是%s

5

在您的switch语句中,在第三种情况下,您调用了一个没有在任何地方定义的shcm函数。您在顶部有一个shc函数的原型,所以我不确定您的意图是什么。您应该定义shcm函数并为其添加原型,或者定义shc函数并调用它而不是shcm

6

虽然您可以摆脱它,但使用与函数同名的变量是不好的做法,因为这会导致混淆,并使代码更难阅读。取而代之的是,变量的名称由您决定。

7

你的风格总体上很难读懂。更一致的缩进将使其更具可读性,同时也更容易发现括号问题,就像您在main中遇到的问题一样。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65262065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档