关于getchar应用
int count = 0;char s[] = {0};
while(getchar() != '\n')
{
s = getchar();
count++;
}
求教这段代码应该怎么改 count是计算数组元素的个数
运行了按回车还是可以继续输入 感觉一直卡在循环里了 本帖最后由 Croper 于 2019-3-26 21:00 编辑
首先
char s[] = {0};
这种写法是错误的,你这样相当于声明了一个长度为1的数组,任何过长输入都会溢出
留空的方括号是让编译器推测数组长度,不是可变长度!不是可变长度!不是可变长度!
第二,你一次循环中使用了两个getchar(),那么就会读取两次字符,并且是奇数的输入用来判断,只有偶数的输入才进入了s,如果刚好'\n'在第偶数个的话,没有判断当然无法结束
正确的写法;#define MAX_STRING_SIZE 256
int main(){
int count = 0;
char s;
do{
s=getchar();
if (s=='\n')break;
++count;
}while (1);
}
或者熟练了可以这么写
#define MAX_STRING_SIZE 256
int main(){
int count = 0;
char s;
while ((s=getchar())!='\n');
--count;
}
不过注意,这几种写法都是默认用count管理数组的长度,并且这个以count为长度的数组包含了‘\n',而没有尾置‘\0’,不能当做字符串使用 你应该用 fgets
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main(void)
{
char s ;
fgets(s , 81 , stdin) ;
s = '\0' ; // 去掉尾部的回车符
printf("%s\n" , s) ;
} Croper 发表于 2019-3-26 20:29
首先
这种写法是错误的,你这样相当于声明了一个长度为1的数组,任何过长输入都会溢出
soga 受教了!请受我一拜!
页:
[1]