数组问题
#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:43 编辑
strlen() 函数从字符串的开头位置依次向后计数,直到遇见\0,然后返回计时器的值。最终统计的字符串长度不包括\0。但是,getchar() 读取时会将回车键读入
本帖最后由 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: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));
} hiwch 发表于 2020-12-25 17:46
当 输入最后的换行符时候 会把 getchar() 放入 a 中,在判断 a 是不是换行符
所以你输入 ABCDE\n 的 ...
十分感谢,由于只能设置一个最佳答案,让你写了这么多也没有什么荣誉的回报,抱歉
页:
[1]