C 如何打印小数点后有不同位数的数组?

C 如何打印小数点后有不同位数的数组?,c,C,所以我有一个数组,它可以保存所有类型的数字,负数,十进制数,整数,所以我用float,我想打印它,和我输入的一样,但按升序排序。 我做了这样的事 scanf("%d", &n); for (i = 0; i < n; ++i) scanf("%f", &a[i]); for(i=0;i<n;i++) { for(j=0;j<n-i-1;j++) { if(a[j]>a[j

所以我有一个数组,它可以保存所有类型的数字,负数,十进制数,整数,所以我用float,我想打印它,和我输入的一样,但按升序排序。 我做了这样的事

scanf("%d", &n);
for (i = 0; i < n; ++i)
       scanf("%f", &a[i]);
for(i=0;i<n;i++)
{
    for(j=0;j<n-i-1;j++)
    {
        if(a[j]>a[j+1])
        {
            temp=a[j+1];
            a[j+1]=a[j];
            a[j]=temp;
        }
    }
}
printf("{%.1f", a[0]);
for(i= 1; i < n; i++)
{
    printf(", %.1f", a[i]);
}
printf("}");
}

scanf(“%d”和&n);
对于(i=0;i
我只需要在相同的for循环中将数字3打印为3,将数字3.4打印为3.4

使用
“%g”
进行打印

%f“
%e”
这样的打印:

“%g”
)…根据转换的值和精度以样式f或e(或在g转换说明符的情况下以样式f或e)进行转换

最后,除非使用#标志,否则从结果的小数部分中删除任何尾随零,如果没有剩余小数部分,则删除小数点字符。C17dr§7.21.6.1 8



若要在原始输入文本为“2.3”、“2.30”和“+2.3”时将2.3打印为“2.3”、“2.30”和“+2.3”,请将输入读取为stirng并保存。

编辑问题以提供逗号。若要处理逗号,请将循环更改为使用逗号打印除最后一个数字外的所有数字,然后在循环后,打印最后一个数字,不使用逗号。(或者,可以打印循环前面的第一个数字,不带逗号,然后打印循环中的其余数字,每个数字前面带逗号。)对于其他问题,我们需要更多地查看您的源代码。要查看输出未排序的原因,我们需要查看输出在代码中的位置,以及排序代码。对于数字问题,我们需要输入和输出的精确副本。@EricPostDischil排序工作正常,我只是有数字输出的问题,我不能使它们根据输入的不同而不同,我有整数和小数,所以我需要打印它们,与我输入的一样,没有额外的小数点。如果我只输入%.f,它适用于整数,但如果我输入%.1f,它适用于小数,但不适用于整数。如果你提供所需的信息,人们会帮助你。如果你不这样做,我预计您的问题将被关闭,可能会被否决。您的选择。@EricPostChil我更新了它,我对该网站不太熟悉,我不太知道它是如何工作的,谢谢。如果您的输入可以包括
1E-36
2.4e+12
2322152343299.34531
0x1.A395DFP-6
,等等,那么获取与输入相同的输出是将数字作为字符串读取(放入结构类型的数组中,其中结构的一个元素是字符串,另一个元素是双精度),然后将字符串转换为
double
值,然后根据double值进行排序,然后按顺序打印字符串。有效输入比任何单一输出格式都要复杂得多。