JandyMan 发表于 2019-3-26 20:08:25

关于getchar应用

int count = 0;
char s[] = {0};
while(getchar() != '\n')
{
        s = getchar();
        count++;

}

求教这段代码应该怎么改 count是计算数组元素的个数
运行了按回车还是可以继续输入 感觉一直卡在循环里了

Croper 发表于 2019-3-26 20:29:37

本帖最后由 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’,不能当做字符串使用

jackz007 发表于 2019-3-26 20:42:44

    你应该用 fgets
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

main(void)
{
      char s                ;
      fgets(s , 81 , stdin)   ;
      s = '\0'   ; // 去掉尾部的回车符
      printf("%s\n" , s)      ;
}

JandyMan 发表于 2019-3-26 21:20:30

Croper 发表于 2019-3-26 20:29
首先

这种写法是错误的,你这样相当于声明了一个长度为1的数组,任何过长输入都会溢出


soga 受教了!请受我一拜!
页: [1]
查看完整版本: 关于getchar应用