我试图从用户输入中做出回文。
我将用户输入保存为char eingabe []中的数组,并使用int计算所使用数组的索引。
然后我想在回文中复制eingabe的反转值,然后打印它们两个以得到回文。
我的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;
}
添加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-1];
而不是。
即使这样也会奏效:
i=0;
do{
palindrom[j++] = eingabe[i++];
} while ( eingabe[i]!='/0');
j=0;
do{
palindrom[j++] = eingabe[i--];
} while ([i]>0);
palindrom[j] = '\0';