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
字符串就是由一个一个字符组成的,用字符输出字符串是很正常的事情啊
我想的是这个程序里面
他应该是,输入一个字符 输出一个结果
而不是输入全部字符之后 在输出结果
putchar 不是用来输出单个字符的吗? https://blog.csdn.net/xiaoweige207/article/details/6206265 冷回清风暖 发表于 2020-2-29 20:45
我想的是这个程序里面
他应该是,输入一个字符 输出一个结果
而不是输入全部字符之后 在输出结果
循环上不是有注释吗
当输入的字符不为换行符时才进入循环 qiuyouzhi 发表于 2020-2-29 20:48
循环上不是有注释吗
当输入的字符不为换行符时才进入循环
每输入一个字符 就进入循环
就会执行一次putchar函数
那么输入Y
输出结果不应该是 Yy吗? 冷回清风暖 发表于 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:53
我用的win10 没有curse这个库{:10_266:} 看注释
#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 20:56
我用的win10 没有curse这个库
vs?
dev++ ? 楼主试试这个代码
#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-2-29 21:39
vs?
dev++ ?
code::blocks 我
2321719263 发表于 2020-3-1 13:47
我
???。。。 作为初学者我也来猜猜。我想gechar函数应该是完成这么一个功能:你输入一行字符后,当按下回车时。这串字符连同“回车字符\n”才会被放入缓存区,这时候getchar函数才开始执行逐个读取字符串的每个字符,直到读取直至\n 本帖最后由 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;
}
Cool_Breeze 发表于 2020-3-3 12:57
借你这个题目,做做!一起加油!
哇 赞 我还没学到后面的动态内存分配 冷回清风暖 发表于 2020-3-3 12:57
哇 赞 我还没学到后面的动态内存分配
指针是最难得! Cool_Breeze 发表于 2020-3-3 13:00
指针是最难得!
最近一直在钻研指针 哈哈哈C语言的精髓在指针 冷回清风暖 发表于 2020-3-3 13:19
最近一直在钻研指针 哈哈哈C语言的精髓在指针
指针这个东西真的是太骚了!
页:
[1]
2