putchar()是输出一个字符的意思,经常用来输出一些特殊字符。
比如你要输出一个空格:putchar('\n')
比如你要输出一条线:for(i=0i<30i++) putchar('-')
和printf有作用相同的地方。相对的getchar()获得一个字符。
puts()和gets()
前者是输出,后者是(从键盘)获得。
但是而这都是对于字符数组或者指向字符数组的指针进行操作的。
比如你在char str[20]里面输入了一个字符串(可以用gets(str)函数实现)。然后通过puts(str)语句就可以进行输出了。这里要注意,这两个函数的括号里面的参数是字符串数组的首地址也就是字符数组的名字或者是已经被赋值指向字符数组的指针的名字。
这两个与scanf("%s",str)以及for和%c的组合相比,优点是书写简便,可以接受空格(比如你输入how are you?的时候,有空格就是能用gets()进行输入了)。scanf是看到空格和回车都认为是结束,而gets可以接受空格,只把回车当做结束。字符串输入输出的时候这两个函数用的频率还是蛮高的。
再就是后面文件方面的输入输出,fgetc()/fputc()/fgets()/fputs(),有兴趣可以看一下。
gets()、puts()都是针对字符串类型处理的,传入的参数是char *型,或char[]型
gets()是输入字符串函数,puts()是字符串输出函数
例如:
char *a
gets(a)
或者:
char a[10]
gets(a)
相当于:
scanf("%s",a)
输出函数:
puts(a)
相当于:
printf("%s\n",a)
问题出在while((ch = getchar() != EOF))语句;!=运算级别高于=,所以会先进行getchar()!=EOF运算,再将运算结果赋值给ch,因而ch的值只能是0或1;纠正的办法:
while((ch = getchar() )!= EOF)
用括号给变运算符优先级,将ch=getchar()括起来。
另外,EOF是字符串的结束符号,因而,只做上述改动,程序会陷入死循环。所以指定一个结束标志使循环结束:
while((ch = getchar() != '\n'))
经过这样的修改,程序运行就没问题了。
完整的程序如下:
#include<stdio.h>
#include<string.h>
int main()
{
int ch
while((ch = getchar())!='\n')
putchar(ch)
putchar('\n')
return 0
}
结果: