鱼C论坛

 找回密码
 立即注册
查看: 1024|回复: 6

[已解决]c语言数组课后作业求助

[复制链接]
发表于 2020-3-6 15:20:16 | 显示全部楼层 |阅读模式

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

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

x
#include <stdio.h>

#define MAX 1024

int main()
{
        char str[MAX];
        char *target = str;
        int length = 0;

        printf("请输入一个字符串:");
        fgets(str, MAX, stdin);

        while (*target++ != '\0')
        {
                length++;
        }

        printf("您总共输入了 %d 个字符!\n", length - 1);

        return 0;
}
为什么最后length要-1
最佳答案
2020-3-6 15:26:42
哈哈,这个问题其实很简单的,fgets会在读到回车时自动结束并在后面加一个'\0',但是在这之前回车也被读取进去了呦,
也就是说运行完fgets()函数后,你的str内是这样的"(你输入的字符)'\n' '\0' "
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-6 15:26:42 | 显示全部楼层    本楼为最佳答案   
哈哈,这个问题其实很简单的,fgets会在读到回车时自动结束并在后面加一个'\0',但是在这之前回车也被读取进去了呦,
也就是说运行完fgets()函数后,你的str内是这样的"(你输入的字符)'\n' '\0' "
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-6 15:35:50 | 显示全部楼层
jzzc 发表于 2020-3-6 15:26
哈哈,这个问题其实很简单的,fgets会在读到回车时自动结束并在后面加一个'\0',但是在这之前回车也被读取 ...

还有不懂的欢迎追问哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-6 15:39:14 | 显示全部楼层
百度来的一些资料:fgets()函数读取到它所遇到的第一个换行符的后面,或者读取比字符串的最大长度少一个的字符,或者读取到文件结尾。然后fgets()函数向末尾添加一个空字符以构成一个字符串。如果在达到字符最大数目之前读完一行,它将在字符串的空字符之前添加一个换行符以标识一行结束。
问题出在有时字符串的结尾处可能多出一个换行符,我们需要把它去掉。
QQ截图20200306153700.png
查看汇编代码也会发现多了一个0xA,这个对应的ascii码就是换行符,所以要去掉
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-6 15:39:34 | 显示全部楼层
jzzc 发表于 2020-3-6 15:26
哈哈,这个问题其实很简单的,fgets会在读到回车时自动结束并在后面加一个'\0',但是在这之前回车也被读取 ...

好的我懂啦 非常感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-6 15:40:40 | 显示全部楼层
KAaha 发表于 2020-3-6 15:39
好的我懂啦 非常感谢

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-6 15:41:44 | 显示全部楼层
4goodworld 发表于 2020-3-6 15:39
百度来的一些资料:fgets()函数读取到它所遇到的第一个换行符的后面,或者读取比字符串的最大长度少一个的 ...

好的好的我已经懂啦 蟹蟹大神们
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-16 00:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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