Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中的字符串输入/输出_C_String - Fatal编程技术网

C语言中的字符串输入/输出

C语言中的字符串输入/输出,c,string,C,String,我需要打印字符串的所有偶数索引,后跟一个空格,然后打印字符串的所有奇数索引。我可以输入多达N个字符串。每个新字符串都将在输出中的新行上,并满足上述条件 下面是我的代码,你能告诉我哪里错了吗 int main() { int i; int N; char str[10000]; scanf("%d",&N); while(N>0) { scanf("%s",str); for(i=0; str[

我需要打印字符串的所有偶数索引,后跟一个空格,然后打印字符串的所有奇数索引。我可以输入多达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;
}

你只需要再做一个这样的循环

#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--;
}
}
然后我实际得到以下输出:

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 | ...
| s | h | o | r | t | \0 | l | o | n | g | i | n | p | u | t | \0 | \0 | ...
因此,对于第一个输入来说,循环很好。但是当我们读入下一个输入时,str看起来像

| r | e | a | l | l | y | l | o | n | g | i | n | p | u | t | \0 | \0 | \0 | ...
| s | h | o | r | t | \0 | l | o | n | g | i | n | p | u | t | \0 | \0 | ...

它只覆盖需要覆盖的内容,其他内容保持不变。由于第一个循环仅扫描偶数索引,因此它将错过第一个\0并继续运行。所以用两个索引是不起作用的。

如果((i%2)==0{printf(“%c”,str[i]);}如果((i%2)==1{printf(“%c”,str[i]);}
那么基本上你在两个分支中都做了相同的事情。你想实现什么?你只使用一个循环。复制你的循环,在一个循环中检查奇数,在另一个循环中检查偶数…(1)不要在注释中发布代码(2)为什么要以1的步骤迭代所有数字并过滤它们?您可以按2的步骤进行迭代,并知道索引是偶数还是奇数。@StoryTeller:需要谨慎的一个原因是您需要测试字符串的结尾-跳过空字节是不好的。但是,如果代码确定了字符串的长度,
len=strlen(str)
然后将
用于(i=0;i
用于(i=1;i
,这样就可以了。按两个索引确实有效。一个人只需要相应地调整循环条件。@storyteller如果可行,你能给我两个索引的循环条件吗?谢谢@eedward这就是我添加了一个循环并完成了,但我以1的增量索引了。