加法在c中不起作用

加法在c中不起作用,c,printf,addition,format-specifiers,C,Printf,Addition,Format Specifiers,我试图添加c代码,但我的程序没有执行,代码块不幸关闭。错误是什么 void main() { float a,b; printf("%30sAddition Of Numbers\n"); printf("\nEnter Number 1: "); scanf("%f",&a); printf("\nEnter Number 2: "); scanf("%f",&b); printf("\nThe addition o

我试图添加c代码,但我的程序没有执行,代码块不幸关闭。错误是什么

void main()
{
    float  a,b;

    printf("%30sAddition Of Numbers\n");
    printf("\nEnter Number 1: ");
    scanf("%f",&a);
    printf("\nEnter Number 2: ");
    scanf("%f",&b);

    printf("\nThe addition of %0.3f and %0.3f is %0.3f",a,b,(a+b));

}
我想把加法的结果直接放在带有浮点输入的printf语句中,但我无法让它工作

我还尝试将结果放入变量a中,但它也不起作用

    void main()
{
    float  a,b;

    printf("%30sAddition Of Numbers\n");
    printf("\nEnter Number 1: ");
    scanf("%f",&a);
    printf("\nEnter Number 2: ");
    scanf("%f",&b);
    a=a+b;
    printf("\nThe addition of %0.3f and %0.3f is %0.3f",a,b,a);

}

我哪里出错了?

问题在下面的陈述中

 printf("%30sAddition Of Numbers\n");
这里,提供给
printf()
conatins
%30s
(或者通常是
%s
)的格式字符串是一个格式说明符(转换说明符),您没有向它提供任何参数。它调用

引用标准第§7.21.6.1章

[…]如果格式的参数不足,则该行为为 未定义。[……]

您还可以查看以了解有关格式说明符的更多信息


编辑:

如下面的注释所述,如果希望在输出之前显示一些空格,请更改

printf("\t\tAddition Of Numbers\n");  
也就是说

  • void main()
    至少应为
    int main(void)
    ,以符合标准
  • 您应该始终检查
    scanf()
    的返回值,以确保扫描成功
在这一行中

printf("%30sAddition Of Numbers\n");
您没有为
%s
格式提供字符串参数。这会导致未定义的行为

如果您想要输出间隔,您可以尝试一个小的修改

printf("%30s\n", "Addition Of Numbers");
在本例中,您提供的字符串文字满足
%s
格式

此外,您必须始终检查
scanf
中的返回值,以查看它是否转换了应该转换的参数数。这是一个基本的新手错误,也是数百个SO问题的根本原因。

您文章中的“%30sAddition of Numbers\n”问题已经通过两个好的答案得到了解决(在本文发表时)。但您在评论中提出了一个可能尚未完全回答的问题:

当我使用所有整数而不是浮点数时,适用于%30s!我如何使它与浮动一起工作

对该问题的一般性回答:
在scanf()中使用的格式说明符:
%f“,&a
如果在意外的换行符、空格或其他空白处进行扫描,可能会导致不希望的结果。这可以通过修改格式说明符字符串以抑制这些字符来解决。这里有一个建议:

char* fmt = "%[^\n]%*c";//This generic format specifier, can be used for both integer
                        //and floating point inputs when used in conjuction
                        //with strtod() or strtol() (see below)
scanf(fmt, input);
解释

当要求用户输入通用数字时,它可能是浮点或整数。您可以通过为两者创建方法,并具体说明您希望处理哪种类型的值来适应这一点:

float get_float(void)
{
    char input[80];
    char **dummy={0};
    char* fmt = "%[^\n]%*c";
    printf("Enter floating point number and hit return:\n");
    scanf(fmt, input);
    return strtod(input, dummy);
}

long get_int(void)
{
    char input[80];
    char **dummy={0};
    char* fmt = "%[^\n]%*c";
    printf("Enter integer number and hit return:\n");
    scanf(fmt, input);
    return strtol(input, dummy, 10);
}
这样称呼:

int main(void)
{
    long integer_var = get_int();
    float float_var = get_float();
    float sum = (float)integer_var + float_var;

    return 0;
}
  • 尝试添加getch();在关闭花括号之前在底部运行
  • 像这样

    void main()
     {
      
      float  a,b;
      printf("%30sAddition Of Numbers\n");
      printf("\nEnter Number 1: ");
      scanf("%f",&a);
      printf("\nEnter Number 2: ");
      scanf("%f",&b);
      a=a+b;
      printf("\nThe addition of %0.3f and %0.3f is %0.3f",a,b,a);
      getch();//it will hold your output screen so you can see the output 
    }
    

    您得到的错误是什么?以什么方式不起作用?代码块不执行。将显示windows错误。。代码块不幸停止working@BrianRiley代码块不是编译器,而是IDE。在Windows上,它通常与mingw一起使用(所以gcc或多或少)。不过,有时候初学者会忽略IDE和IDE背后的工具之间的区别;printf(“\n将%0.3f和%0.3f相加为%0.3f”,a、b、a);你需要另一个变量c,这样c=a+b;printf(“\n将%0.3f和%0.3f相加为%0.3f”,a、b、c);好的,这是可行的,但当我把所有的浮点数都改成整数时,这是可行的。怎样我下一步该怎么办?我不知道你的意思,请更具体一点,如果是新问题,请问另一个问题!当我将所有数据类型更改为整数值时,%s格式有效,但在上述情况下它不起作用,为什么?因为不为
    %s
    提供参数是未定义的行为。“when this”或“when that”不相关,接下来会发生什么。但我认为它是用来给空间的。那么它意味着什么呢?当我使用所有整数而不是浮点数时,程序使用%30s!如何使其与浮动一起工作。@pratikwatwani好吧,请阅读链接文章以了解未定义的行为。:)@不客气。你也可以。