鱼C论坛

 找回密码
 立即注册
查看: 707|回复: 4

[已解决]数组问题

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

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

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

x
#include<stdio.h>
#include<string.h>
int main()
{
    char a[50];
    int i=0;
    printf("请输入英文文本:");
    while((a[i++]=getchar())!='\n')
        ;
    printf("你总共输入了%d个字符",strlen(a));
}

这种算出来的结果总是多一个,我知道是将输入录入数组的那一步出的问题,想知道具体的问题在哪儿
  
例:输入 ABCDE 结果显示 我总共输入了6个字符
最佳答案
2020-12-25 18:28:29
本帖最后由 jackz007 于 2020-12-25 18:32 编辑

        楼主试一下这个代码
#include<stdio.h>
#include<string.h>

int main(void)
{
        char a[50]                                ;
        int i = 0                                 ;
        printf("请输入英文文本:")                ;
        while((a[i] = getchar()) != '\n') i ++    ;  // 只有 a[i] 不是换行符的时候 i 才加 1 
        a[i] = '\0'                               ;  // a[i] 是换行符的时候退出循环,用字符串结束标志覆盖这个换行符
        printf("你总共输入了%d个字符" , strlen(a));
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-12-25 16:39:32 | 显示全部楼层
本帖最后由 风过无痕1989 于 2020-12-25 16:43 编辑

strlen() 函数从字符串的开头位置依次向后计数,直到遇见\0,然后返回计时器的值。最终统计的字符串长度不包括\0。但是,getchar() 读取时会将回车键读入
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-25 17:46:27 | 显示全部楼层
本帖最后由 hiwch 于 2020-12-25 17:50 编辑
  while((a[i++]=getchar())!='\n') 

当 输入最后的换行符时候 会把 getchar() 放入 a[i++] 中,在判断 a[i++] 是不是换行符

所以你输入 ABCDE\n 的时候 a数组里面放的是 ABCDE\n 所以当然是 6了,a数组里面是你输入的所有的内容(包括换行符)


你试下这个代码 我试了下是OK的
#include<stdio.h>
#include<string.h>
int main()
{
    char a[50];
    char b[50];
    int i=0;
    printf("请输入英文文本:");
    while((a[i]=getchar())!='\n'){
       b[i] = a[i];
       i = i +1; 
    }
    printf("你总共输入了%d个字符,包含换行符号\n",strlen(a));
    printf("你总共输入了%d个字符\n",strlen(b));
}


Snipaste_2020-12-25_17-50-05.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-25 18:28:29 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2020-12-25 18:32 编辑

        楼主试一下这个代码
#include<stdio.h>
#include<string.h>

int main(void)
{
        char a[50]                                ;
        int i = 0                                 ;
        printf("请输入英文文本:")                ;
        while((a[i] = getchar()) != '\n') i ++    ;  // 只有 a[i] 不是换行符的时候 i 才加 1 
        a[i] = '\0'                               ;  // a[i] 是换行符的时候退出循环,用字符串结束标志覆盖这个换行符
        printf("你总共输入了%d个字符" , strlen(a));
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-25 22:02:11 | 显示全部楼层
hiwch 发表于 2020-12-25 17:46
当 输入最后的换行符时候 会把 getchar() 放入 a 中,在判断 a 是不是换行符

所以你输入 ABCDE\n 的 ...

十分感谢,由于只能设置一个最佳答案,让你写了这么多也没有什么荣誉的回报,抱歉
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 06:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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