(以下内容对于刚接触C的同学会有帮助)
getchar()是I/O函数中的一员【所谓I/O函数就是input output 函数】
大多数的系统都是行缓冲输入【先把我们要输入的键入缓存区,当用户按下“Enter”后,程序才可以使用该内容】
getchar 与 scanf 不同,前者是可以按顺序读取所有的字符(包括空格,制表符,换行符)
而scanf 在读取数字的时候会跳过空格,制表符,换行符
#include<stdio.h>
int main()
{
char ch;
int n1,n2;
printf("输入一个字符\n");
ch=getchar();
printf("/n");
printf("输入2个数字\n");
scanf("%d%d",&n1,&n2);
putchar(ch);printf("/n");
printf("%d %d",n1,n2);
}
读者可以用以上代码自己试一试。
#include<stdio.h>
void display(char cr,int lines,int width);
int main()
{
int ch;
int rows,cols;
printf("输入一个字符和两个数字\n");
while((ch=getchar())!='\n')
{
scanf("%d%d",&rows,&cols);
display(ch,rows,cols);
printf("输入另一个字符和两个数字\n");
printf("输入一个新的换行来结束");
}
printf("再见\n");
return 0;
}
void display(char cr,int lines,int width)
{
int row,col;
for(row=1;row<=lines;row++)
{
for(col=1;col<=width;col++)
putchar(cr);
putchar('\n');
}
}
这是一个getchar 和 scanf 混用的函数,他的输出是有问题的,我们希望他是在我们最后按下”Enter"之后程序结束,但是这个程序只能“一轮游”。其原因在于,我们为了让程序开始使用缓存区的内容,我们不得不输入“Enter”(也就是按下换行键),而在这个换行符,也会进入缓存区,相当于提前输入了一个“Enter”。所以才会这样。改进的方案可以是
while((ch=getchar())!='$')
用一个别的字符来代替“\n”。
这里再给初学者拓展一下,scanf()函数是有返回值的,输入几个数字,返回值就是几。
#include<stdio.h>
int main()
{
int i,j,k,l,m;
//i=scanf("%d",&k);
printf("\n");
j=scanf("%d%d%d",&l,&k,&i);
printf("\n");
printf("%d",j);
}
可以在这个代码上做实验。
最后希望可以帮助到你@你