不要从 char palindrome[] 中获取输出
Dont get the output out of char palindrom[]
我正在尝试根据用户输入制作回文。
我将用户输入保存为 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] = '[=10=]';
do{
palindrom[j] = eingabe[i];
j++;
--i;
} while (i != 0);
palindrom[j] = '[=10=]';
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。由于回文 ([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] = '[=10=]';
我正在尝试根据用户输入制作回文。
我将用户输入保存为 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] = '[=10=]';
do{
palindrom[j] = eingabe[i];
j++;
--i;
} while (i != 0);
palindrom[j] = '[=10=]';
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。由于回文 ([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] = '[=10=]';