加法在c中不起作用
我试图添加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
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;
}
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好吧,请阅读链接文章以了解未定义的行为。:)@不客气。你也可以。