鱼C论坛

 找回密码
 立即注册
查看: 135|回复: 2

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

[复制链接]
发表于 2024-10-23 20:44:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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

int main()
{
        char str1[100];
        char str2[100];

        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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-10-23 20:44:53 | 显示全部楼层
你提到的代码有几点需要改进:

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

这里是修正后的代码:
#include <stdio.h>

int main()
{
    char str1[100];
    char str2[100];

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

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

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

    return 0;
}

### 关键修改点:

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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-10-23 21:05:31 | 显示全部楼层
这一句:
        while((*p1==*p2)!='\0')
改为:
        while(* p1 && * p2 && * p1 == * p2)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 18:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表