我需要打印一个字符串的所有偶数索引,然后是空格,然后是字符串的所有奇数索引。我可以输入与字符串N一样多的数字。每个新字符串将在输出中的新行上提供上述条件。
以下是我的代码,你能说明我错在哪里吗?
int main() {
int i;
int N;
char str[10000];
scanf("%d",&N);
while(N>0)
{
scanf("%s",str);
for(i=0; str[i] != '\0'; i++)
{
if((i%2)== 0)
{
printf("%c",str[i]);
}
else if((i%2)==1)
{
printf("%c",str[i]);
}
}
printf("\n");
N--;
}
return 0;
}
答案 0 :(得分:-1)
你只需要另一个这样的循环
#include<stdio.h>
int main(int argc, char** argv) {
int i, N;
char str[10000];
scanf("%d", &N);
printf("%d\n", N);
while (N > 0) {
scanf("%s", str);
printf("%s\n", str);
// Even Indcies:
for (i = 0; str[i] != '\0'; i++) {
if (i % 2 == 0) {
printf("%c", str[i]);
}
//printf("%d", i);
}
printf(" ");
//Odd Indices
for (i = 1; str[i] != '\0'; i++) {
if (i % 2 == 1) {
printf("%c", str[i]);
}
//printf("%d", i);
}
printf("\n");
N--;
}
}
在回应@ StoryTeller的评论时,请考虑以下C代码
#include<stdio.h>
int main() {
int i, N;
char str[10000];
scanf("%d", &N);
while (N > 0) {
scanf("%s", str);
//printf("%s\n", str);
// Even Indcies:
for (i = 0; str[i] != '\0'; i+=2) {
printf("%c", str[i]);
//printf("%d", i);
}
printf(" ");
//Odd Indices
for (i = 1; str[i] != '\0'; i+= 2) {
printf("%c", str[i]);
//printf("%d", i);
}
printf("\n");
N--;
}
如果我在提示时输入以下参数:
2
reallylonginput
short
然后我实际得到以下输出:
rallnipt elyognu
sotlnipt hr
第一个工作正常,正如我们所期望的那样。但是,第二个包含在第一个群集上没有意义的字符,即 lnipt 。要了解为什么会发生这种情况,我们必须仔细研究str变量。
调用第一个scanf时,输入写入str,str看起来像
| r | e | a | l | l | y | l | o | n | g | i | n | p | u | t | \0 | \0 | \0 | ...
所以第一次输入的循环很好。但是当我们在下一个输入中读取时,str看起来像
| s | h | o | r | t | \0 | l | o | n | g | i | n | p | u | t | \0 | \0 | ...
它只会覆盖所需的内容,并保持其他所有内容不受影响。由于第一个循环只扫描偶数索引,因此它会错过第一个\ 0并继续运行。因此,两个索引不起作用。