c - 交换 8 个字母的字符数组。没有正确交换

标签 c arrays

我被要求编写一个程序,使用 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/

上一篇:在函数中调用指针

下一篇:C 数组分区

相关文章:

ruby - array[4,0] 返回 [],但 array[5,0] 返回 nil... 为什么?

php - 如何在 Blade 模板的 foreach 循环中访问 Laravel 集合?

c++ - 移动数组以替换删除的元素

c - 练习 5.6 Kochan 的 C 语言编程

c - 如何在 Linux 上为 gcc 制作一个简单的 makefile

c - 两种不同的内存错误取决于我分配内存的位置

arrays - 如何在 Active Admin Rails 4 中保存数组?

分配很多基本数据类型会导致内存泄漏,你能避免吗?

c - 预处理器参数和在 C 中编译#ifndef#ifdef

javascript - 在要计算的对象经常变化的模型中计算属性