holistic杀手 发表于 2024-10-23 20:44:40

课后作业S1E22:指针和数组的问题

题目:使用 fgets 函数接收用户输入的两个字符串(仅支持英文)到 str1 和 str2 中,对比 str1 和 str2,如果两个字符串完全一致,打印“完全一致”;如果存在不同,打印第一处不同的位置(索引下标)。

循环那里有问题,但看不出来问题是什么{:10_272:}
#include <stdio.h>

int main()
{
      char str1;
      char str2;

      printf("请输入第一个字符串:");
      fgets(str1,100,stdin);
      printf("请输入第二个字符串:");
      fgets(str2,100,stdin);

      char *p1 = str1;
      char *p2 = str2;

      int index =1;
      while((*p1==*p2)!='\0')
      {
                p1++;
                p2++;
                index++;
      }


      if(*p1=='\0'&&*p2=='\0')
      {
                printf("两个字符串完全一致!\n");
      }
      else
      {
                printf("两个字符串不完全相同,第%d个字符出现不同!\n",index);
      }


      return 0;
}

FishC 发表于 2024-10-23 20:44:53

你提到的代码有几点需要改进:

1. **变量声明错误**:`char str1;`应该是`char str1;`,因为`fgets`需要接收数组。
2. **`while`循环条件错误**:不该用`'\\0'`进行比较。
3. **比较方法错误**:应直接比较字符。

这里是修正后的代码:

#include <stdio.h>

int main()
{
    char str1;
    char str2;

    printf("请输入第一个字符串:");
    fgets(str1, sizeof(str1), stdin);
    printf("请输入第二个字符串:");
    fgets(str2, sizeof(str2), stdin);

    int index = 0;
    while (str1 != '\0' && str2 != '\0')
    {
      if (str1 != str2)
      {
            printf("两个字符串不完全相同,第%d个字符出现不同!\n", index + 1);
            return 0;
      }
      index++;
    }

    if (str1 == '\0' && str2 == '\0')
    {
      printf("两个字符串完全一致!\n");
    }
    else
    {
      printf("两个字符串不完全相同,第%d个字符出现不同!\n", index + 1);
    }

    return 0;
}

### 关键修改点:

- **用于存储字符串的数组**:`char str1; char str2;`
- **循环终止条件**:用`str1 != '\0' && str2 != '\0'`
- **字符比较**:`if (str1 != str2)`,比较时需确保每个字符。

这样代码能正确比较输入的两个字符串。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

jackz007 发表于 2024-10-23 21:05:31

这一句:
      while((*p1==*p2)!='\0')
改为:
      while(* p1 && * p2 && * p1 == * p2)
页: [1]
查看完整版本: 课后作业S1E22:指针和数组的问题