c - C 中的字符串输入/输出

标签 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[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--;
}
}

为了回应@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 并继续运行。因此按 2 进行索引是行不通的。

关于c - C 中的字符串输入/输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42589697/

相关文章:

C程序编译错误(带头文件)

c - 利用字符串指针打印字符-整数组合

string - UIWebView 崩溃从 HTML 加载链接

c - 错误 : expected primary-expression before "__attribute__";

c - 从函数返回一个结构到 main.c?

c - 如何从内核调用系统调用?

c - GNU Triplet、GCC 和 Linux 内核编译

.net - 如何在 VB.net 中删除 .Sort 之前的引号

c# - 无法将类型 'string' 隐式转换为 'System.Collections.Generic.List<string>'

ruby - 从存储在带有转义字符的变量中的字符串创建正则表达式 (Ruby)