【问题标题】:Dont get the output out of char palindrom[]不要从 char palindrome[] 中获取输出
【发布时间】:2019-04-23 18:56:00
【问题描述】:

我试图从用户输入中制作回文。

我将用户输入保存为 char eingabe[] 中的数组 用 int 我计算所用数组的索引。

然后我想将 eingabe 的反转值复制到回文中,然后 printf 将它们都复制到回文中。

我的 i 和 j 计数正确,但我没有得到回文的输出。

我希望你能帮助我。

#include <stdio.h>

int main(){
char eingabe[20];
char palindrom[20];
int i = 0;
int j = 0;  
char c;

do{
    c = getchar();
    if (c != EOF){
        eingabe[i] = c;
        i++;
    }
} while (c != EOF);

eingabe[i] = '\0';


do{ 
    palindrom[j] = eingabe[i];

    j++;
    --i;


} while (i != 0);

    palindrom[j] = '\0';

    printf("\n\n%s",eingabe);
    printf("%s\n\n",palindrom);

    return 0;
}

【问题讨论】:

    标签: c palindrome


    【解决方案1】:

    有时添加 printf 以查看发生了什么非常有帮助。例如,如果我添加:

    do { 
        printf("palindrom[%d] = eingabe[%d]\n", j, i);
        palindrom[j] = eingabe[i];
    

    那么输出是:

    abcde
    palindrom[0] = eingabe[5]
    palindrom[1] = eingabe[4]
    palindrom[2] = eingabe[3]
    palindrom[3] = eingabe[2]
    palindrom[4] = eingabe[1]
    eingabe:   "abcde"
    palindrom: ""
    

    问题很明显:数组索引减 1。由于 palindrom ([0]) 的第一个字符被设置为 eingabe ([5]) 的最后一个字符,即“\0”,因此 C将其视为空字符串。

    这很容易通过将 --i 移到循环顶部来纠正:

    do { 
        --i;
        palindrom[j] = eingabe[i];
        j++;
    } while (i != 0);
    

    【讨论】:

    • 天哪,这太容易了。非常感谢你。但现在对我来说很有意义,谢谢你的时间。
    • 只要使用后自增和前自减运算符,就可以将循环内部合并为一行:palindrom[j++] = eingabe[--i];
    【解决方案2】:

    改用palindrom[j] = eingabe[i-1];

    【讨论】:

    • 感谢您的帮助,这也有效,但我选择了 maharvey67 的解决方案,它对我来说看起来更容易。
    【解决方案3】:

    即使这样也行:

    i=0;
    do{ 
        palindrom[j++] = eingabe[i++];
    } while ( eingabe[i]!='/0');
    j=0;
    do{ 
        palindrom[j++] = eingabe[i--];
    } while ([i]>0);
    
    palindrom[j] = '\0';
    

    【讨论】:

      猜你喜欢
      • 2020-07-20
      • 2019-04-02
      • 1970-01-01
      • 2011-05-09
      • 1970-01-01
      • 2020-08-18
      • 1970-01-01
      • 2018-09-12
      • 1970-01-01
      相关资源
      最近更新 更多