c - 我的代码在 C 编程中的顺序

标签 c

<分区>

我刚刚开始学习 C 编程,为大学的第一个类做准备。当我遇到问题时,我正在练习编写这段简单的代码。我不知道为什么,但是我放置代码的顺序改变了最终输出。这是我的代码:

#include "stdio.h"
/* A program to convert customer's coins into dollar slips */

#define DOLL 100              /* Conversion factor for dollar */
#define QURT 25               /* Conversion factor for quarter */
#define DIME 10               /* Conversion factor for dime */
#define NCKL 5                /* Conversion factor for nickel */
int main(void){
    int dollar, quarter, dime,  /* input - count of each coin types */
        nickel, pennies;        /* input - count of each coin types */
    int total;                  /* compute - total of value of coins in cents */
    int leftover;               /* compute - leftover cents */
    int total_dollar;           /* compute - total $ value for credit slip */
    char first, middle, last;   /* input - 3 initials */

    /* Get the count of each kind of coin */
    printf("Number of $ coin> ");
    scanf("%d",&dollar);
    printf("Number of quarter> ");
    scanf("%d",&quarter);
    printf("Number of dimes> ");
    scanf("%d",&dime);
    printf("Number of nickels> ");
    scanf("%d",&nickel);
    printf("Number of pennies> ");
    scanf("%d",&pennies);


    /* Compute for the total value in cents */
    total = dollar * DOLL + quarter * QURT + dime * DIME + nickel * NCKL + pennies;

    /* Compute the final value of credit slip in dollar */
    leftover = total % 100;
    total_dollar = total / 100;

    /* Get the initial for the slip */
    printf("Enter your initial> ");
    scanf("%c%c%c",&first, &middle, &last);

    /* Output */
    printf("Your credit slip>");
    printf("%c%c%c credit",first, middle, last);
    printf("\n%d $ and %d cents",total_dollar, leftover);

    return (0);
}

当我先询问硬币数量然后询问初始值时,我得到了错误的结果(例如,如果我将 JRH 作为初始值,它最后只会返回 JR)。 但是如果我先得到用户的首字母,我就会得到想要的结果。任何人都可以解释一下吗?是否有我不知道的特定命令需要遵循?非常感谢!

最佳答案

对单个字符使用 scanf() 有一个恼人的怪癖,如果您输入某些内容并按“enter”,则“enter”按键生成的换行符可以被下一个 sprintf() 调用。最有可能发生的情况是 first 被分配了一个换行符,middle 被分配了“J”,而 last 被分配了一个换行符.要验证这一点,请将以下内容添加到您的输出中:

printf("0x%02x 0x%02x 0x%02x\n", first, middle, last);

这将显示每个变量中的具体数值。如果一切正常,您应该会看到“0x4a 0x52 0x48”。我怀疑您实际看到的是“0x0a 0x4a 0x52”。

如果确实如此,请参阅 this question有关正在发生的事情的详细信息,以及几个可能的解决方案。

关于c - 我的代码在 C 编程中的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31324036/

相关文章:

c++ - 如何在 C/C++ 中将 typedef 函数作为参数传递

c - sockaddr_in 不支持地址族

c - 有人可以告诉我我的错误吗?

c - C 上的数组默认是可变长度的吗?

c - 从 'char*' 到 'char [-fpermissive] 的转换无效

c - 程序运行后退出?

c - 了解如何使用 C 中的按位运算符计算数字的尾随零

java - 当我设置 Xmx 和 agentlib 时,我得到无效的最大堆大小

c++ - 在 C/C++ 中多次包含头文件

c - 将几个依赖库链接到我的 "bare metal"C 应用程序中