【问题标题】:How to show array elements at once (at the position %d)如何一次显示数组元素(在位置 %d)
【发布时间】:2023-02-25 11:00:07
【问题描述】:

我想制作一个大小为空的数组(如下面的 x 和 z) --> 仅通过循环(不是通过 scanf、getchar() 或手动键入数组中的元素)用元素填充数组
--> 然后一行打印出元素,例如: “偶数是:2,4,6,8,10,12,14,20” <-- 这是我想要得到的结果。

如果您对此有所帮助,我将不胜感激!

以下是我到目前为止所做的。


#include<stdio.h>

int main(){
        int i,j;
        int x[ 30 ];
        char b[ 30 ];

        for (i = 1; i<=20; i++){
                if(i%2 ==0){
                        x[i] = i;
                        sprintf(b, " %d ", x[i]);
                        printf("Even nums are: %s ", b);
                }
        }
}

到目前为止,我使数组以循环中的“我”作为其元素。在那之后,我尝试将 char 数组连接到一个语句或类似的语句,char[0] = "2,4,6,8 ..." 但无法成功。

【问题讨论】:

  • 将每个数字存储在数组中很重要吗?您是否满足于简单地打印您想要的输出:“偶数是:2,4,6,8,10,12,14,20“?
  • 首先这里不需要任何数组。其次,请记住数组索引从零开始,使用基于一的索引会使您的代码看起来很奇怪,并且会让其他查看代码的人感到惊讶。
  • 至于如何解决你的问题,strcat 函数可能有用。但请记住两件事:1)它要求目标字符串是一个实际初始化的空终止字符串,你的数组b不是那个;并且 2) 确保您知道将向字符串中添加多少个字符,并相应地调整大小(并记住空终止符所需的空间)。

标签: c


【解决方案1】:

基于不需要存储单个值的假设,只需构建您想要的字符串就很简单:

#include <stdio.h>

int main( void ) {
    char str[ 100 ], *at = str; // Generous buffer and a pointer to its beginning

    at += sprintf( at, "Even nums are: " ); // Load the output prefix

    char *sep = ""; // initially NO separator

    for( int i = 2; i <= 20; i += 2 ) { // Count 2 -> 20 by 2's
        at += sprintf( at, "%s%d", sep, i ); // append to growing string
        sep = ", "; // subsequent values preceded by separator
    }

    // output
    puts( str );

    return 0;
}
Even nums are: 2, 4, 6, 8, 10, 12, 14, 16, 18, 20

【讨论】:

    【解决方案2】:

    C 不会自动在 printf 语句的末尾添加换行符,因此您可以简单地为每个数字单独使用逗号之前的打印语句(第一个值除外,开头不应有逗号)。

    #include <stdio.h>
    int main(){
        int i;
            
        printf("Even nums are: ");
        for (i = 1; i<=20; i++){
            if(i%2 ==0){
                if (i == 2)
                    printf("%d", i);
                else
                    printf(", %d", i);
            }
        }
    }
    

    您不需要列表,但是如果您想在两个单独的 for 循环中执行此操作,只需让第一个 for 循环将每个偶数分配给一个列表,就像您在代码中所做的那样,然后让第二个 for 循环执行 printf通过索引列表的语句。

    【讨论】:

    • 循环完成后可能应该有一个 putchar(' '); 或类似的东西。确保您总是在末尾生成带有换行符的行。
    猜你喜欢
    • 1970-01-01
    • 2020-10-25
    • 2020-10-26
    • 1970-01-01
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多