C语言scanf函数和getchar函数搭配使用需谨慎

C语言中的scanf函数是输入函数,getchar是获取用户在命令行输入的字符,scanf函数遇到空格或者是换行符(\n)会跳过,但是getchar函数则不会跳过这些字符,看下面这段代码:

scanf("%d %d",&rows,&cols);

ch=getchar();

printf(“%c”,ch);

在命令行中输入两个整数,然后按下回车,运行结果是输出一行,因为getchar获取的字符是换行符,这个换行符是输入两个数字之后,按下回车之后发生的。

所以当scanf函数和getchar函数搭配使用的时候需要注意在运行了scanf函之后,换行符还是留在了输入行中。

下面是一个输入一个字符,两个整数,打印几行几列该字符的案例。

#include<stdio.h>

void display(char cr,int lines,int width);//声明函数

int main(void){

//存储用户输入的字符

char ch;

//行和列

int rows,cols;

//输入一个字符,两个整数

printf("enter a character and two integers:\n");

//判断输入的字符是否为换行符,如果遇到换行符,则结束while循环

while((ch=getchar())!='\n'){

//输入两个整数

scanf("%d %d",&rows,&cols);

//调用display函数,根据输入的行和列,打印相应数量的字符

display(ch,rows,cols);

// 跳过scanf后面的换行符,用了一个getchar来获取换行符,下一个getchar就会获取输入的字符了

while(getchar()!='\n'){

continue;

}

// 让用户继续输入内容

printf("enter another character and two integers;\n");

printf("enter a newline to quit.\n");

}

// 结束输入

printf("Bye.\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');

}

}

运行:

编辑搜图

请点击输入图片描述(最多18字)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容