Cehic 发表于 2020-12-25 16:20:59

数组问题

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

这种算出来的结果总是多一个,我知道是将输入录入数组的那一步出的问题,想知道具体的问题在哪儿

例:输入 ABCDE 结果显示 我总共输入了6个字符

风过无痕1989 发表于 2020-12-25 16:39:32

本帖最后由 风过无痕1989 于 2020-12-25 16:43 编辑

strlen() 函数从字符串的开头位置依次向后计数,直到遇见\0,然后返回计时器的值。最终统计的字符串长度不包括\0。但是,getchar() 读取时会将回车键读入

hiwch 发表于 2020-12-25 17:46:27

本帖最后由 hiwch 于 2020-12-25 17:50 编辑

while((a=getchar())!='\n')

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

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


你试下这个代码 我试了下是OK的

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



jackz007 发表于 2020-12-25 18:28:29

本帖最后由 jackz007 于 2020-12-25 18:32 编辑

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

int main(void)
{
      char a                              ;
      int i = 0                                 ;
      printf("请输入英文文本:")                ;
      while((a = getchar()) != '\n') i ++    ;// 只有 a 不是换行符的时候 i 才加 1
      a = '\0'                               ;// a 是换行符的时候退出循环,用字符串结束标志覆盖这个换行符
      printf("你总共输入了%d个字符" , strlen(a));
}

Cehic 发表于 2020-12-25 22:02:11

hiwch 发表于 2020-12-25 17:46
当 输入最后的换行符时候 会把 getchar() 放入 a 中,在判断 a 是不是换行符

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

十分感谢,由于只能设置一个最佳答案,让你写了这么多也没有什么荣誉的回报,抱歉
页: [1]
查看完整版本: 数组问题