代码无法正确显示输出

时间:2016-07-11 01:35:51

标签: c for-loop

我是C的新手并编写了一个代码,我想要显示"?"在屏幕上,它匹配数组中的值。如果我有一个用index_location [6] = {0,1,5,8,9,12}初始化的数组;我的预期输出详述如下。非常感谢帮助我的任何帮助或帮助。

  

输出:   ?? @@@?@@ ?? @@?

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

//
int main(void)
{
    int index_location[6] = {0, 1, 5, 8, 9, 12};
    int len=sizeof(index_location)/sizeof(int);

    for (int a = 0; a < len; a++)
    {
        for(int b = 0; b < len; b++)
        {
            if ( a == index_location[b])
            {
                printf("%c",'?'); 
            } else {
                printf("%c",'@'); 
            }
        }
    }
    printf("\n");
}

2 个答案:

答案 0 :(得分:3)

您只需要一个循环。您需要浏览索引位置0..12(其中12是index_location数组中的最后一个条目),检查您是否需要每次打印?@。当您打印出与index_location条目之一对应的字符时,您需要继续查看下一个条目。你可以添加一个自由的assert()调用集合来确保事物处于控制之下,但只要数组按顺序排列,你应该没问题(即使不是这样,你也可以放弃它,尽管你可能会错过一些请求的?标记。

#include <stdio.h>

int main(void)
{
    int index_location[6] = {0, 1, 5, 8, 9, 12};
    int len = sizeof(index_location) / sizeof(index_location[0]);
    int max = index_location[len - 1];
    int idx = 0;

    for (int a = 0; a <= max; a++)
    {
        if (a < index_location[idx])
            putchar('@');
        else
        {
            putchar('?');
            idx++;
        }
    }
    putchar('\n');
    return 0;
}

输出:

??@@@?@@??@@?

答案 1 :(得分:0)

错误在于你的for循环。我会采用以下解决方案。
如果数组index_location []按升序排序,请将此for循环用于双初始化intead:

int max = index_location[len-1];
for(int i = 0,j = 0; i <= max; i++)
{
    if ( i == index_location[j])
    {
       printf("%c",'?');
       j++;
    } 
    else {
       printf("%c",'@');
    }
}