putchar问题

#include<stdio.h>
#include<stype.h>
void main()
{char ch;
printf("Input a line:\n");
while((ch=getchar())!='\n')
{if(isalpha(ch))
putchar(ch+1);这里为什么不能是ch=ch+1;putchar(ch)呢?
else
putchar(ch);}
putchar(ch);为什么这句意思是输出换行符?
}
另外单看这程序的意思不是输入一个字符就立马输出么?为什么会是输入一行后才输出来?不懂,求解释。

 

答:不能是  ch=ch+1;putchar(ch);
可以是{ch=ch+1;putchar(ch);}
while判断ch为'\n'时结束循环, 所以ch正好是换行
另外#include<stype.h>应该是<ctype.h>

追问

单看这程序的意思不是输入一个字符就立马输出么?为什么会是输入一行后才输出来?
不能是  ch=ch+1;putchar(ch);的原因是什么?

答:if(isalpha(ch))ch=ch+1;putchar(ch); 你这样的话只有ch=ch+1;一句是if的 putchar(ch);就不是if的了,所以要加上大括号 getchar虽然是得到单个字符, 但C的标准输入流按回车后才会返回 如果流里没东西, 那就得回车才有反应, 如果已经有东西,就可以直接返回 你可以用非标准的,比如getch/_getch或getche/_getche, 这个按键就返回

追问:

if(isalpha(ch)){ch=ch+1;putchar(ch);}???这样呢
 
答:恩,这样可以 if后跟单个语句,或一个语句块 while/for什么的都是这样。

 
 
 
 
 
 
 
 
 
 
putchar里边是数字,比如: putchar(111) putchar('111') putchar('0'+111) putchar('0'+'111') 输出的结果都是什么?
 
 
putchar(111) :输出的是ASCII码表的111号元素:o
putchar('111') :putchar()只能输出1个字符,所以实际第一个字符以后的字符都是多余的,此题输出1
putchar('0'+111) :此题输出ASCII码表的‘0’后的第111个元素 ‘0’是48号元素,即此题输出159号元素
ASCII码表只有128个元素,其它都是空格,故此题输出空格
putchar('0'+'111') :如2题所说此题等价于putchar('0'+'1') ‘0’48号,‘1’49号;即输出97号元素:a
 
 
 
 
 
以下程序运行可输出ASCII码表,希望对你有帮助 #include<iostream.h> #include<iomanip.h> class table { public: table(int p) { i = p; } void ascii(); protected: int i; }; void table::ascii() { int k = 1; for (; i <= 128; i++) { cout<<setw(4)<<i<<' '<<(char)i; if (!(k)) cout<<endl; k++; } cout<<endl; } class der_table:public table { public: der_table(int p, char *m):table(p){c = m;} void print(); protected: char *c; }; void der_table::print() { cout<<c<<endl; table::ascii(); } void main() { der_table ob1(1,"ASCII value--char"); ob1.print(); cout<<endl; der_table ob2('a',"ASCII value--char"); ob2.print(); char c; cin>>c; }
posted @ 2013-08-28 21:56  果丁  阅读(944)  评论(0编辑  收藏  举报