c - C 中数组的输出不会格式化?

标签 c arrays formatting

我是这个网站的新手,正在寻求帮助。我正在尝试设计一个程序,它将从用户那里获取数字输入,将其存储到一个数组中,并将它们正确地格式化为三列。但是,我似乎无法弄清楚为什么我的输入格式不正确。

#include <stdio.h>
int main()
{

int x=0;
float num[100];

/* for loop for receiving inputs from user and storing it in array */
for (x=0; x<=100; x++)
{
    scanf("%f", &num[x]);
    printf("%7.1lf%11.0lf%10.3lf", num[x], num[x+1], num[x+2]);

    //printf("%f %f %f\n", num[0], num[1], num[2]);

}
return 0;

最佳答案

我看到的问题:

  1. for 循环中使用了不正确的范围。鉴于

    float num[100];
    

    最大有效索引为 99。因此,for 循环需要:

    for (x=0; x < 100; x++)  // x < 100 not x <= 100
    
  2. 在初始化之前使用数组元素。

    printf("%7.1lf%11.0lf%10.3lf", num[x], num[x+1], num[x+2]);
    

    num[x+1]num[x+2] 中没有任何内容被读入。因此,您将获得垃圾值。

  3. 使用越界数组索引访问 num

    访问 num[x]num[x+1]num[x+2] 只有在 >x+2 小于或等于 97


我的建议:

使用两个循环。在第一个循环中,读取数据。在第二个循环中,写出数据。

for (x=0; x < 100; x++)  // Using 100 here.
{
    scanf("%f", &num[x]);
}

for (x=0; x < 98; x++)  // Using 98 here.
{
    printf("%7.1lf%11.0lf%10.3lf", num[x], num[x+1], num[x+2]);
}

更新,回应 OP 的评论

将打印循环更改为:

for (x=0; x < 98; x += 3)  // Increment x by 3
{
    printf("%7.1lf%11.0lf%10.3lf", num[x], num[x+1], num[x+2]);
}

关于c - C 中数组的输出不会格式化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39283503/

相关文章:

c - 类型检查 ANSI C 中的任意长度数组

java - 如何获取未解码的文件名

php - 如何通过连接从 MySQL select 获取嵌套数组

java - 如何显示格式化的联系电话?

java - 将 session 记录转换为人类可读的格式

java - Eclipse - 格式化 java 类/接口(interface)声明

c - 我的 csv_loader() 函数中出现段错误

c++ - libparted 确定已使用的扇区

arrays - 如何在 bash 中使用 'readarray' 将文件中的行读入二维数组

python - 组合 numpy 数组中的值