我被要求编写一个程序,使用 getchar() 函数填充两个 8 字母数组。然后我被要求交换两个数组。
int main(void)
{
char arr1[8];
char arr2[8];
char c;
int counter = 0;
char hold[8];
printf("Please enter 8 characters (Array 1):\t");
while(counter < 8)
{
c = getchar();
arr1[counter] = c;
counter++;
}
counter=0;
printf("Please enter 8 characters (Array 2):\t");
while(counter < 8)
{
c = getchar();
arr2[counter] = c;
counter++;
}
counter=1;
while (counter !=9)
{
printf("\n%c",arr1[counter-1]);
printf("\t%c",arr2[counter]);
counter++;
}
counter=0;
while (counter!=8)
{
hold[counter] = arr1[counter];
arr1[counter] = arr2[counter];
arr2[counter] = hold[counter];
counter++;
}
printf("\n\n\n");
counter=1;
while (counter !=9)
{
printf("\n%c",arr1[counter-1]);
printf("\t%c",arr2[counter]);
counter++;
}
return 0;
}
谁能告诉我交换数组时我做错了什么?
编辑:我意识到这可能是我的第二次 printf 搞砸了,而不是实际上的数组交换。
最佳答案
您的交换代码没有问题,您打印数组的方式有一些问题:
while (counter !=9)
{
printf("\n%c",arr1[counter-1]); // why -1?
printf("\t%c",arr2[counter]); // will access array out of bounds (index 8)
counter++;
}
这是正确的方法:
for(counter=0;counter<8;counter++)
{
printf("\n%c",arr1[counter]);
printf("\t%c",arr2[counter]);
}
此外,您可以通过不使用数组来 hold
来简化交换代码:
char hold;
...
for(counter=0;counter<8;counter++)
{
hold = arr1[counter];
arr1[counter] = arr2[counter];
arr2[counter] = hold;
}
如aruisdante建议,for
循环比 while
循环更适合您的用例
关于c - 交换 8 个字母的字符数组。没有正确交换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23408725/