打印数组元素会产生错误输出

时间:2015-09-06 23:12:27

标签: c arrays loops printf

我正在尝试根据用户输入打印由数字和美元符号组成的模式。我要求用户为模式选择一个选项,然后我要求模式的大小。我使用swap来创建模式,因此如果用户选择选项1然后输入大小为4,他们应该得到类似的东西:

  

4 $$$ $ 4 $$ $$ 4 $ $$$ 4。

现在我只想让patternOne(0工作。我无法打印出我在patternOne()函数中创建的数组元素。这是我的代码:

#include <stdio.h>

int main(void) {

    int option, size;
    do {
        printf("\nMENU\n");
        printf("1. Pattern one\n"
               "2. Pattern two\n"
               "3. Pattern three\n"
               "4. Pattern four\n"
               "5. Quit\n");
        fflush(stdout);

        do {
            printf("Please enter your choice (between 1 & 5): ");
            fflush(stdout);
            scanf("%d", &option);
        }while(option < 1 || option > 5);

        switch(option) {
            case 1:
                do {
                    printf("Choose a pattern size (between 2 & 9): \n");
                    fflush(stdout);
                    scanf("%d", &size);
                }while(size < 2 || size > 9);
                patternOne(size);
                break;

            case 2:
                printf("Testing case 2.");
                break;

            case 3:
                printf("Still testing.");
                break;

            case 4:
                printf("Testing case 4.");
                break;

            case 5:
                printf("Thank you for playing.\n");
                break;
        }

    }while(option != 5);

    return 0;

}

void patternOne(int size) {
    char ar[size];
    ar[0] = size;
    for(int i = 1; i < size - 1; i++) {
        ar[i] = '$';
    }
    int x = 0, y = 1, temp, iter = 0;
    while(iter <= size) {
        for(int j = 0; j < size - 1; j++)
        {
            printf(j);
        }
        temp = ar[x];
        ar[x] = ar[y];
        ar[y] = temp;
        x++;
        y++;
        iter++;
    }
}

2 个答案:

答案 0 :(得分:2)

首先,您需要拥有patternOne()函数patternOne(),否则,您将获得隐式定义问题。

然后,在 printf(j); 代码中

printf("%d", j);

应该是,至少

patternOne()

否则,您将把一个invgalid类型的参数传递给forward declaration并调用printf()

FWIW,您可以使用以下算法简化char功能的逻辑

  1. 创建$数组
  2. memset to 0
  3. 运行循环,从n-1迭代到n,设置{{1}}值。
  4. 继续2,直到循环用完

答案 1 :(得分:0)

希望这是你想要的,我修改了代码 Sourav Ghosh 建议,

用这个替换你的模式一个函数,

void patternOne(int size) {
    char ar[size];
    memset (ar, '$', size);

    for (int h=0; h<size; h++){
        for(int i=0; i<size; i++) {
            if(h==i)
                printf("%d",size);
            else
                printf("%c",ar[i]);
        }
        printf(" ");
    }
}

这是我得到的输出

[ This is the output i got [1]