在创建C货币计算器时遇到一些问题

在创建C货币计算器时遇到一些问题,c,C,我正在尝试创建一个用C语言编程的货币计算器。该计算器从stdin获取数据。这是我想要的预期结果: $ ./alkansiya Welcome to the Alkansiya Calculator! How many 1000 pesos? 3 How many 500 pesos? 7 How many 200 pesos? 0 How many 100 pesos? 15 How many 50 pesos? 23 How many 20 pesos? 46 How many 10 peso

我正在尝试创建一个用C语言编程的货币计算器。该计算器从stdin获取数据。这是我想要的预期结果:

$ ./alkansiya
Welcome to the Alkansiya Calculator!
How many 1000 pesos?
3
How many 500 pesos?
7
How many 200 pesos?
0
How many 100 pesos?
15
How many 50 pesos?
23
How many 20 pesos?
46
How many 10 pesos?
162
How many 5 pesos?
279
How many 1 pesos?
73
How many 50 cents?
4
How many 25 cents?
1
How many 10 cents?
0
How many 5 cents?
0
How many 1 cents?
0
Your balance is 13158 pesos and 225 centavos
但是,我下面的代码与预期结果不一样,最终导致分段错误:

#include <stdio.h>
int main(void)
{
    int onethousandpesos = 0;
    int fivehundredpesos = 0;
    int twohundredpesos = 0;
    int onehundredpesos = 0;
    int fiftypesos = 0;
    int twentypesos = 0;
    int tenpesos = 0;
    int fivepesos = 0;
    int onepeso = 0;
    int fiftycentavos = 0;
    int twentyfivecentavos = 0;
    int tencentavos = 0;
    int fivecentavos = 0;
    int onecentavo = 0;

    printf("Welcome to the Alkansiya Calculator!\n");
    printf("How many 1000 pesos?\n");
        scanf("%i", onethousandpesos);
    printf("How many 500 pesos?\n");
        scanf("%i", fivehundredpesos);
    printf("How many 200 pesos?\n");
        scanf("%i", twohundredpesos);
    printf("How many 100 pesos?\n");
        scanf("%i", onehundredpesos);
    printf("How many 50 pesos?\n");
        scanf("%i", fiftypesos);
    printf("How many 20 pesos?\n");
        scanf("%i", twentypesos);
    printf("How many 10 pesos?\n");
        scanf("%i", tenpesos);
    printf("How many 5 pesos?\n");
        scanf("%i", fivepesos);
    printf("How many 1 pesos?\n");
        scanf("%i", onepeso);
    printf("How many 50 cents?\n");
        scanf("%i", fiftycentavos);
    printf("How many 25 cents?\n");
        scanf("%i", twentyfivecentavos);
    printf("How many 10 cents?\n");
        scanf("%i", tencentavos);
    printf("How many 5 cents?\n");
        scanf("%i", fivecentavos);
    printf("How many 1 cents?\n");
        scanf("%i", onecentavo);
    printf("Your balance is %i pesos ", (1000*onethousandpesos)+(500*fivehundredpesos)+(200*twohundredpesos)+(100*onehundredpesos)+(50*fiftypesos)+(20*twentypesos)+(10*tenpesos)+(5*fivepesos)+onepeso);
    printf("and '''%d''' centavos.\n", fiftycentavos+twentyfivecentavos+tencentavos+fivecentavos+onecentavo);

    return 0;
}
我不明白这些警告。我想把它修好,但还是不走运。我是C语言的初学者。有人能帮我修复此代码吗?

错误:

  • 无论何时从stdin获取任何输入,您都需要使用&(一个人)这个地址运算符将数据存储到
    scanf
    函数的任何变量中,因此这是一个导致分段错误的错误

  • 接受任何有符号整数输入时,必须使用
    %d
    代替
    %i
    这是一个导致警告的错误

  • 我已经采取了你的程序,并编译和删除的错误,下面有一个程序是无错误的。您可以复制并粘贴到编辑器中,然后检查输出 如果有任何问题,请回答我,我会帮你解决

    注意:在检查输出之前,请注意以下代码中旧文件的修改

    #include <stdio.h> 
    int main(void) {
        int onethousandpesos = 0;
        int fivehundredpesos = 0;
        int twohundredpesos = 0;
        int onehundredpesos = 0;
        int fiftypesos = 0;
        int twentypesos = 0;
        int tenpesos = 0;
        int fivepesos = 0;
        int onepeso = 0;
        int fiftycentavos = 0;
        int twentyfivecentavos = 0;
        int tencentavos = 0;
        int fivecentavos = 0;
        int onecentavo = 0;
    
        printf("Welcome to the Alkansiya Calculator!\n");
        printf("How many 1000 pesos?\n"); scanf("%d", &onethousandpesos);
        printf("How many 500 pesos?\n"); scanf("%d", &fivehundredpesos);
        printf("How many 200 pesos?\n"); scanf("%d", &twohundredpesos);
        printf("How many 100 pesos?\n"); scanf("%d", &onehundredpesos);
        printf("How many 50  pesos?\n"); scanf("%d", &fiftypesos);
        printf("How many 20 pesos?\n"); scanf("%d", &twentypesos);
        printf("How many 10 pesos?\n"); scanf("%d", &tenpesos);
        printf("How many 5 pesos?\n"); scanf("%d", &fivepesos);
        printf("How many 1 pesos?\n"); scanf("%d", &onepeso);
        printf("How many 50 cents?\n"); scanf("%d", &fiftycentavos);
        printf("How many 25 cents?\n"); scanf("%d", &twentyfivecentavos);
        printf("How many 10 cents?\n"); scanf("%d", &tencentavos);
        printf("How many 5 cents?\n"); scanf("%d", &fivecentavos);
        printf("How many 1 cents?\n"); scanf("%d", &onecentavo);
        printf("Your balance is %d pesos ", (1000*onethousandpesos)+(500*fivehundredpesos)+(200*twohundredpesos)+(100*onehundredpesos)+(50*fiftypesos)+(20*twentypesos)+(10*tenpesos)+(5*fivepesos)+onepeso);
        printf("and '''%d''' centavos.\n", fiftycentavos+twentyfivecentavos+tencentavos+fivecentavos+onecentavo);
        return 0; 
    }
    
    #包括
    内部主(空){
    整数一小时和比索=0;
    int fivehundpesos=0;
    int Twondredpesos=0;
    int ONEDPESOS=0;
    int-fiftypesos=0;
    整数二十比索=0;
    整数十比索=0;
    整数五比索=0;
    int onepeso=0;
    int fiftycentavos=0;
    int twentyfivecentavos=0;
    int tencentavos=0;
    int fivecentavos=0;
    int-onecentavo=0;
    printf(“欢迎使用Alkansiya计算器!\n”);
    printf(“多少1000比索?\n”);scanf(“%d”和1/100比索);
    printf(“多少500比索?\n”);scanf(“%d”和500比索);
    printf(“多少200比索?\n”);scanf(“%d”和两百比索);
    printf(“多少100比索?\n”);scanf(“%d”和100比索);
    printf(“多少50比索?\n”);scanf(“%d”和fiftypeso);
    printf(“多少20比索?\n”);scanf(“d”和20比索);
    printf(“多少10比索?\n”);scanf(“%d”和十比索);
    printf(“多少5比索?\n”);scanf(“%d”和“5比索”);
    printf(“多少1比索?\n”);scanf(“%d”和一比索);
    printf(“多少50美分?\n”);scanf(“%d”和“fiftycentavos”);
    printf(“多少25美分?\n”);scanf(“%d”和二十五美分);
    printf(“多少10美分?\n”);scanf(“d”)和tencentavos;
    printf(“多少5美分?\n”);scanf(“%d”)和fivecentavos);
    printf(“多少1美分?\n”);scanf(“%d”&onecentavo);
    printf(“您的余额为%d比索”,(1000*千分之一比索)+(500*百分之五比索)+(200*百分之二比索)+(100*百分之一比索)+(50*百分之五比索)+(20*二十比索)+(10*十比索)+(5*百分之五比索)+一比索);
    printf(“和''%d''centavos.\n',fiftycentavos+twentycentavos+tencentavos+fivecentavos+onecentavo);
    返回0;
    }
    
    scanf(“%i”,foo)
    ->
    scanf(“%i”,foo)
    阅读这些警告,它们会准确地告诉您出了什么问题。回到你的课本,从头开始。@PaulR完美!我的计算器工作正常。请将其作为答案发布,以便我可以接受:)
    scanf
    %I
    不推荐使用。我建议改为
    %d
    (实际上,我建议根本不要使用
    scanf
    进行用户输入)。@Someprogrammerdude学习C时,我会一直记住这一点。至少我从中学到了一些重要的东西:)
    #include <stdio.h> 
    int main(void) {
        int onethousandpesos = 0;
        int fivehundredpesos = 0;
        int twohundredpesos = 0;
        int onehundredpesos = 0;
        int fiftypesos = 0;
        int twentypesos = 0;
        int tenpesos = 0;
        int fivepesos = 0;
        int onepeso = 0;
        int fiftycentavos = 0;
        int twentyfivecentavos = 0;
        int tencentavos = 0;
        int fivecentavos = 0;
        int onecentavo = 0;
    
        printf("Welcome to the Alkansiya Calculator!\n");
        printf("How many 1000 pesos?\n"); scanf("%d", &onethousandpesos);
        printf("How many 500 pesos?\n"); scanf("%d", &fivehundredpesos);
        printf("How many 200 pesos?\n"); scanf("%d", &twohundredpesos);
        printf("How many 100 pesos?\n"); scanf("%d", &onehundredpesos);
        printf("How many 50  pesos?\n"); scanf("%d", &fiftypesos);
        printf("How many 20 pesos?\n"); scanf("%d", &twentypesos);
        printf("How many 10 pesos?\n"); scanf("%d", &tenpesos);
        printf("How many 5 pesos?\n"); scanf("%d", &fivepesos);
        printf("How many 1 pesos?\n"); scanf("%d", &onepeso);
        printf("How many 50 cents?\n"); scanf("%d", &fiftycentavos);
        printf("How many 25 cents?\n"); scanf("%d", &twentyfivecentavos);
        printf("How many 10 cents?\n"); scanf("%d", &tencentavos);
        printf("How many 5 cents?\n"); scanf("%d", &fivecentavos);
        printf("How many 1 cents?\n"); scanf("%d", &onecentavo);
        printf("Your balance is %d pesos ", (1000*onethousandpesos)+(500*fivehundredpesos)+(200*twohundredpesos)+(100*onehundredpesos)+(50*fiftypesos)+(20*twentypesos)+(10*tenpesos)+(5*fivepesos)+onepeso);
        printf("and '''%d''' centavos.\n", fiftycentavos+twentyfivecentavos+tencentavos+fivecentavos+onecentavo);
        return 0; 
    }