详解C语言中scanf函数使用的一些注意点

所属分类: 软件编程 / C 语言 阅读数: 61
收藏 0 赞 0 分享

 (一)基本介绍

Scanf是系统自带的函数,声明包含在stdio.h文件中,因此要是有该函数,必须加载#include<stdio.h>头文件。当执行到scanf函数时,程序就暂停等待用户输入,该函数只接受变量的地址,格式为&变量名。是一个阻塞式的函数,2用户输入完毕后,则将值赋值给变量,至此函数调用完毕。敲回车键告知计算机键入完毕。

(二)使用注意

①. 使用scanf函数输入一个字符变量。Char a; scanf(“%c”,&a);

②. 同时输入多个值。Scanf(“%d,%d”,&num1,num2);

③. Scanf(“%d\n”,&a);//在内部不能使用\n转义字符,否则没完没了。

 

注意:在这里两个占位符之间是,隔开,则要求在输入时也使用逗号隔开如输入1,2。此时为num1=1,num2=2。若内部为“%d#%d”则输入1#2。若内部为“%dy%d”,则输入1y2。如果中间的字符是空格,则在输入时可以用空格隔开,也可以敲tab键或者是回车键作为分隔符隔开,后两者可以看做是由空格组成的。

(三)一次踩坑的碎碎念...

#include<stdio.h>

int main()
{
 char ch;
 printf("选择A或者B(按回车键确认):");
 scanf("%c",&ch);
 while(1)
 {
 if(ch == 'B' || ch == 'b')
 {
  printf("对不起,您输入的答案错误,请重新输入!\n选择A或者B(按回车键确认):");
  //getchar();
  scanf("%c",&ch);
  printf("ch=%c",ch);
 }
 else
 {
  printf("\n正确\n");
  break;
 }
 }
 return 0;
}

上面代码的得到的结果是:

201649162808089.jpg (363×121)

貌似跟我预想的不一样,我本想如果输入的是'B'或者'b'就继续循环输入,但是结果确实直接做了一次循环就停止了。为什么呢?

原来在循环外的那个scanf做完后按下的回车键进入了缓存,而进入循环执行scanf后(这次输入的也是'b'),缓存的内容应该是buffer[] ={'b','\n'};而执行printf("ch=%c",ch);时取的值就是'\n',所以看上去好像没有执行scanf语句,其他执行了,只是这次打印的字符不是刚刚输入的'b',而是它前一个字符'\n',所以要达到我本来的效果,则需要先将'\n'从缓存中清除掉,调用一次getchar();即可,如上代码也只需将注释的那一句代码解注释即可。

更多精彩内容其他人还在看

C++中四种对象生存期和作用域以及static的用法总结分析

以下是对C++中四种对象生存期和作用域以及static的用法进行了详细的介绍,需要的朋友可以过来参考下
收藏 0 赞 0 分享

C++嵌套类与局部类详细解析

从作用域的角度看,嵌套类被隐藏在外围类之中,该类名只能在外围类中使用。如果在外围类之外的作用域使用该类名时,需要加名字限定
收藏 0 赞 0 分享

C++空类详解

以下是对C++中的空类进行了详细的介绍,需要的朋友可以过来参考下
收藏 0 赞 0 分享

C++之友元:友元函数和友元类详解

友元是一种允许非类成员函数访问类的非公有成员的一种机制。可以把一个函数指定为类的友元,也可以把整个类指定为另一个类的友元
收藏 0 赞 0 分享

C++中返回指向函数的指针示例

int (*ff(int)) (int *,int);表示:ff(int)是一个函数,带有一个int型的形参,该函数返回int (*) (int *,int),它是一个指向函数的指针,所指向的函数返回int型并带有两个分别是Int*和int型的形参
收藏 0 赞 0 分享

C数据结构之单链表详细示例分析

以下是对C语言中的单链表进行了详细的分析介绍,需要的朋友可以过来参考下
收藏 0 赞 0 分享

C数据结构之双链表详细示例分析

以下是对c语言中的双链表进行了详细的分析介绍,需要的朋友可以过来参考下
收藏 0 赞 0 分享

浅析如何在c语言中调用Linux脚本

如何在c语言中调用Linux脚本呢?下面小编就为大家详细的介绍一下吧!需要的朋友可以过来参考下
收藏 0 赞 0 分享

深入解析unsigned int 和 int

以下是对unsigned int和int进行了详细的分析介绍,需要的朋友可以过来参考下
收藏 0 赞 0 分享

浅谈C++中的string 类型占几个字节

本篇文章小编并不是为大家讲解string类型的用法,而是讲解我个人比较好奇的问题,就是string 类型占几个字节
收藏 0 赞 0 分享
查看更多