我是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");
}
答案 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",'@');
}
}