学编程的盆子 发表于 2020-8-4 21:21:28

新手求助一下getchar这个问题

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



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

这两个区别是啥,为啥我如果写下面这种的话程序就运行错误呢? (我想应该是跟优先级有关,但是不太懂)
还有就是为什么这个 '\n' 就表示换行符?

xiaosi4081 发表于 2020-8-4 21:22:17

本帖最后由 xiaosi4081 于 2020-8-4 21:24 编辑

ch=getchar()的意思是获得一个字符给ch,如果获得的字符不是'\n'(回车符),就执行循环,否则退出循环。

livcui 发表于 2020-8-4 21:27:01

\n 就是 \n ,没有什么为什么

学编程的盆子 发表于 2020-8-4 21:30:12

xiaosi4081 发表于 2020-8-4 21:22
ch=getchar()的意思是获得一个字符给ch,如果获得的字符不是'\n'(回车符),就执行循环,否则退出循环。

我的意思是上下两个不同表达式那个括号的区别体现在哪

livcui 发表于 2020-8-4 21:30:51

学编程的盆子 发表于 2020-8-4 21:30
我的意思是上下两个不同表达式那个括号的区别体现在哪

第一个不符合语法啊

学编程的盆子 发表于 2020-8-4 21:31:42

while ((ch = getchar()) != '\n')
和while (ch = getchar() != '\n')

学编程的盆子 发表于 2020-8-4 21:32:20

应该是这两个的区别 打错了抱歉

sunrise085 发表于 2020-8-4 21:32:22

第一种写法:while((ch=getchar() != '\n'),少了半个括号,while((ch=getchar()) != '\n')
加上之后就对了。
先将getchar获取的键盘输入字符赋值给ch,然后判断该字符是不是'\n',若不是的话,则进行循环。ch为键盘输入的字符

第二种写法:while(ch=getchar() != '\n'),因为优先级问题,会先进行不等于判断,然后在将判断结果赋值给ch,ch为0或1

两种写法都能达到非'\n'即循环的目的,但是ch值不一样,第一种写法,ch为键盘输入的字符,第二种写法,ch为0或1

'\n'为回车,这是语法规定。

学编程的盆子 发表于 2020-8-4 21:34:24

sunrise085 发表于 2020-8-4 21:32
第一种写法:while((ch=getchar() != '\n'),少了半个括号,while((ch=getchar()) != '\n')
加上之后就对 ...

可以 谢谢老铁

livcui 发表于 2020-8-4 21:34:53

学编程的盆子 发表于 2020-8-4 21:31
while ((ch = getchar()) != '\n')
和while (ch = getchar() != '\n')

学编程的盆子 发表于 2020-8-4 21:47:15

sunrise085 发表于 2020-8-4 21:32
第一种写法:while((ch=getchar() != '\n'),少了半个括号,while((ch=getchar()) != '\n')
加上之后就对 ...

#include <stdio.h>
#include <string.h>

#define NUM 128

int main()
{
      int ch, i, j = 0, max = 0;
      int input_num = 0;
      int ascii = {0};
      char count = "";

      printf("请输入英文文本:");

      while ((ch = getchar()) != '\n')
      {
                ascii++; // 字符对应的ASCII码加1
                input_num++;
      }

这里的ascii++ 是啥意思啊 ch不是存储的字符吗,怎么又变成ascii码了 这里看不懂 大佬解释一下

sunrise085 发表于 2020-8-4 21:55:46

学编程的盆子 发表于 2020-8-4 21:47
这里的ascii++ 是啥意思啊 ch不是存储的字符吗,怎么又变成ascii码了 这里看不懂 大佬解释一下

C语言中char类型实际上也是整型的一部分,每个字符都有对应的ASCII码值。
例如你输入的是'a' ,那么ch='a','a'的ASCII码值是97,这里就是 ascii++
每输入一个字符,在数组ascii[]中与该字符ASCII码值对应下标的值就会自加一,这就达到了统计的目的。
例如输入一串字符之后,ascii自加了五次,ascii=5,说明你输入的字符串中有5个ASCII码值为35的字符,ASCII码值为35的字符是#,也就是你输入了五个#。其他字符也一样

学编程的盆子 发表于 2020-8-4 22:12:33

sunrise085 发表于 2020-8-4 21:55
C语言中char类型实际上也是整型的一部分,每个字符都有对应的ASCII码值。
例如你输入的是'a' ,那么ch=' ...

懂了 char好像小甲鱼也说到了是特殊的整型 然后这样理解嗯嗯

学编程的盆子 发表于 2020-8-4 22:21:44

sunrise085 发表于 2020-8-4 21:55
C语言中char类型实际上也是整型的一部分,每个字符都有对应的ASCII码值。
例如你输入的是'a' ,那么ch=' ...

#include <stdio.h>
#include <string.h>

#define NUM 128

int main()
{
      int ch, i, j = 0, max = 0;
      int input_num = 0;
      int ascii = {0};
      char count = "";

      printf("请输入英文文本:");

      while ((ch = getchar()) != '\n')
      {
                ascii++; // 字符对应的ASCII码加1
                input_num++;
      }

      for (i = 0; i < NUM; i++)
      {
                if (ascii)
                {
                        count = i;
                        if (ascii > ascii)
                        {
                              max = i;
                        }
                }
      }

      printf("你总共输入了%d个字符,其中不同的字符个数有%d个。\n", input_num, strlen(count));
      printf("它们是:%s\n", count);
      printf("出现次数最多的字符是\'%c\',它总共出现了%d次。\n", max, ascii);

      return 0;
}

这个for开始又给我整懵了 我理解他不是从i=0开始,然后如果ascii 有值,那这里的i比如说等于97,也就是你刚说的a。下面他又 count=i;就这里给我整懵了 。你看下我前面说的对不对头

sunrise085 发表于 2020-8-4 22:28:28

学编程的盆子 发表于 2020-8-4 22:21
#include
#include



看看这个帖子吧。我写的比较详细。你应该能看懂
页: [1]
查看完整版本: 新手求助一下getchar这个问题