冷回清风暖 发表于 2020-2-29 20:39:24

while循环中putchar为什么能够达到输出字符串的目的

本帖最后由 冷回清风暖 于 2020-2-29 20:43 编辑

getchar()它是一个输入流的函数,从标准输入里读取下一个字符,也就是把输入的字符以队列的形式放入缓冲区,直到用户按回车为止。
putchar作用是向终端输出一个字符,参数必须是一个字符,可以是介于0~127之间的一个十进制整型数。
不过我对下面这个程序不明白。
这个程序我想的是:
        每输入一个字符,会进入while循环
        getchar会将输入的字符所读应的ASCLL码放入缓冲区,并利用变量ch存储.
        紧接着进行字符大小写的替换
        接下来会运行到putchar函数,到这里应该输出当前字符
所以我预想的输出形式应该是:
        每输入一个字符,就会输出对这个字符进行大小写替换的结果,依次循环,最后回车结束程序。
但是运行后的结果是以字符串的形式显示的
        输入的字符显示在”请输入一行英文句子:“后面 ,按回车之后才输出的结果
和我想得输入一个字符,就输出这个字符转换后的结果,不一样
查了好久,不知道为什么{:10_266:}
#include <stdio.h>
#define num 32;

int main()
{
      int i , ch;
      printf("请输入一行英文句子:");
      while((ch = getchar())!='\n')//输入字符且并未按回车时进入循环
      {
            if (ch >= 'A' && ch <= 'Z')
                {
                        ch = ch + num;
                }
            else if('a' <= ch <= 'z')
            {
                ch = ch - 32;
            }
            putchar(ch);//输出单个字符
      }

      return 0;
}

qiuyouzhi 发表于 2020-2-29 20:44:03

字符串就是由一个一个字符组成的,用字符输出字符串是很正常的事情啊

冷回清风暖 发表于 2020-2-29 20:45:35

qiuyouzhi 发表于 2020-2-29 20:44
字符串就是由一个一个字符组成的,用字符输出字符串是很正常的事情啊

我想的是这个程序里面
他应该是,输入一个字符 输出一个结果
而不是输入全部字符之后 在输出结果
putchar 不是用来输出单个字符的吗?

人造人 发表于 2020-2-29 20:47:09

https://blog.csdn.net/xiaoweige207/article/details/6206265

qiuyouzhi 发表于 2020-2-29 20:48:11

冷回清风暖 发表于 2020-2-29 20:45
我想的是这个程序里面
他应该是,输入一个字符 输出一个结果
而不是输入全部字符之后 在输出结果


循环上不是有注释吗
当输入的字符不为换行符时才进入循环

冷回清风暖 发表于 2020-2-29 20:50:49

qiuyouzhi 发表于 2020-2-29 20:48
循环上不是有注释吗
当输入的字符不为换行符时才进入循环

每输入一个字符 就进入循环
就会执行一次putchar函数
那么输入Y
输出结果不应该是 Yy吗?

人造人 发表于 2020-2-29 20:53:29

冷回清风暖 发表于 2020-2-29 20:50
每输入一个字符 就进入循环
就会执行一次putchar函数
那么输入Y


#include <curses.h>

int main(void)
{
        initscr();
        int ch;
        while((ch = getch()) != 'q')
                printw("%c\n", ch);
        endwin();
        return 0;
}

冷回清风暖 发表于 2020-2-29 20:56:23

人造人 发表于 2020-2-29 20:53


我用的win10 没有curse这个库{:10_266:}

major_lyu 发表于 2020-2-29 21:15:20

看注释


#include <stdio.h>
#define num 32;

int main()
{
      int i , ch;
      printf("请输入一行英文句子:");   // 你输入一行字符后,字符串连同最后的回车都放在一个缓冲区buf中,只是这个是隐藏的你看不到
      while((ch = getchar())!='\n')// getchar的作用相当于从缓冲区中读取buf, i=i+1。
       {
            if (ch >= 'A' && ch <= 'Z')
                {
                        ch = ch + num;
                }
            else if('a' <= ch <= 'z')
            {
                ch = ch - 32;
            }
            putchar(ch);//输出buf转换后的字符
      }

      return 0;
}

人造人 发表于 2020-2-29 21:39:35

冷回清风暖 发表于 2020-2-29 20:56
我用的win10 没有curse这个库

vs?
dev++ ?

jackz007 发表于 2020-2-29 21:59:23

      楼主试试这个代码
#include <stdio.h>
#include <conio.h>

main(void)
{
      char c                                       ;
      while((c = getch()) != '\r') {
                if (c < 32) c = 46                     ;
                else if (c >= 'A' && c <= 'Z') c += 32 ;
                else if (c >= 'a' && c <= 'z') c -= 32 ;
                putch(c)                               ;
      }
      printf("\n")                                 ;
}

冷回清风暖 发表于 2020-3-1 10:30:56

人造人 发表于 2020-2-29 21:39
vs?
dev++ ?

code::blocks

2321719263 发表于 2020-3-1 13:47:51


冷回清风暖 发表于 2020-3-2 10:10:29

2321719263 发表于 2020-3-1 13:47


???。。。

Bobo_Keiko 发表于 2020-3-3 00:04:14

作为初学者我也来猜猜。我想gechar函数应该是完成这么一个功能:你输入一行字符后,当按下回车时。这串字符连同“回车字符\n”才会被放入缓存区,这时候getchar函数才开始执行逐个读取字符串的每个字符,直到读取直至\n

Cool_Breeze 发表于 2020-3-3 12:57:04

本帖最后由 Cool_Breeze 于 2020-3-3 13:01 编辑

借你这个题目,做做!一起加油!#include <stdio.h>
#include <malloc.h>
int main()
{
        int j=1024;
        char *c=(char *)malloc(j);
        int i=0;
        while (fgets(c,j,stdin))
        {
                for (i=0;*(c+i);i++)
                {
                        if (i==j-1) break;
                        else if (*(c+i) >=65 && *(c+i) <= 90) *(c+i)+=32;
                        else if (*(c+i) >=97 && *(c+i) <= 122) *(c+i)-=32;
                }
                printf("%sinput :",c);
        }
        return 0;
}

冷回清风暖 发表于 2020-3-3 12:57:45

Cool_Breeze 发表于 2020-3-3 12:57
借你这个题目,做做!一起加油!

哇 赞 我还没学到后面的动态内存分配

Cool_Breeze 发表于 2020-3-3 13:00:17

冷回清风暖 发表于 2020-3-3 12:57
哇 赞 我还没学到后面的动态内存分配

指针是最难得!

冷回清风暖 发表于 2020-3-3 13:19:43

Cool_Breeze 发表于 2020-3-3 13:00
指针是最难得!

最近一直在钻研指针 哈哈哈C语言的精髓在指针

Cool_Breeze 发表于 2020-3-3 13:47:42

冷回清风暖 发表于 2020-3-3 13:19
最近一直在钻研指针 哈哈哈C语言的精髓在指针

指针这个东西真的是太骚了!
页: [1] 2
查看完整版本: while循环中putchar为什么能够达到输出字符串的目的