printf并不像我想象的那样表现

时间:2016-01-10 00:54:11

标签: c

如果我运行下面的代码,它就不会显示整个答案(last printf("")就是答案)。我想知道为什么它没有显示整个答案。有谁知道这个问题?

#include <stdio.h>

int main()
{
    int M,T,P,K,H;
    printf("Teekonna pikkus:\n");
    scanf("%u", &P);
    printf("Tarbitud k\u00FCtuse kogus:\n");
    scanf("%u", &K);
    printf("K\u00FCtuse liitri hind:\n");
    scanf("%u", &H);
    T = K/(P/100);
    M = K*H;
    printf("Olete s\u00F5itnud %u", P," kilomeetrit ning kulutanud %u", K," liitrit kütust. Teie auto k\u00FCtusekulu oli %u", T," liitrit 100 kilomeetri kohta. S\u00F5idu maksumus oli %u", M," eurot.");
    while(1);
}

4 个答案:

答案 0 :(得分:7)

printf具有以下语法:

int printf ( const char * format, ... );

第一个参数是格式,所有其他变量都可以替换格式中存在的占位符。

你应该写:

printf("Olete s\u00F5itnud %u kilomeetrit ning kulutanud %u liitrit kütust. Teie auto k\u00FCtusekulu oli %u liitrit 100 kilomeetri kohta. S\u00F5idu maksumus oli %u eurot.", P, K, T, M);

答案 1 :(得分:2)

这不是printf的工作方式。将所有参数放在格式字符串之后。

printf("Olete s\u00F5itnud %u kilomeetrit ning kulutanud %u liitrit kütust. Teie auto k\u00FCtusekulu oli %u liitrit 100 kilomeetri kohta. S\u00F5idu maksumus oli %u" eurot.", P, K, T, M);

答案 2 :(得分:1)

代码中有两个问题:

  • printf()应该用作:printf("P: %d - T: %d\n", P, T);

  • 但也有可能除以零

T = K/(P/100);

Pinteger,如果P/100变得足够小,它将四舍五入为0.然后K/0(零)将产生问题。< / p>

因此,应在分割前检查这些值。对某些变量使用(或转换为)floatdouble可能更好。

答案 3 :(得分:0)

printf()输出基于第一个字符串参数(格式化字符串),用字符串后面的附加参数替换其中的特殊%字符(“格式化说明符”)。

因此它仅显示您要求显示的内容,因为您只有%u(unsigned int,对应于P)。其余参数将被忽略,因为在格式化字符串

中找不到其他格式说明符

您应该连接所有格式化字符串:

  printf (""Olete s\u00F5itnud %u  kilomeetrit ning kulutanud %u ...%u...%u...", P, K, T, M);