关于C语言的scanf,首先看个例子

int get_int(void){
int input;
char ch;
while(scanf("%d",&input)!=){
printf("is not an integer,please enter agin\n");
}
printf("%d\n",input);
return input;
}

这个例子中,如果你输入的不是一个数字的话,程序就会陷入死循环,原因: 如果scanf没有成功读取输入就会将其留在输入队列中,所以下次再从输入队列中读取的时候,还是失败,所以循环了

改正:

int get_int(void){
int input;
char ch;
while(scanf("%d",&input)!=){
while(getchar()!='\n'){
continue;
}
printf("is not an integer,please enter agin\n");
}
printf("%d\n",input);
return input;
}

从输入队列中剔除那些有问题的输入

例子:

/**
* menu.c
* @desc 菜单技术
*/
#include <stdio.h>
char get_choice(void);
char get_first(void);
int get_int(void);
void count(void); int main(void){
char choice;
choice = get_choice();
if(choice != 'q'){
switch(choice){
case 'a':
printf("Buy low, sell high\n");
break;
case 'b':
putchar('\a');
break;
case 'c':
count();
break;
default:
printf("Program error!\n");
break;
}
}
printf("Bye\n");
} /**
* 获取一个整数型的输入
*/
int get_int(void){
int input;
printf("Please input a int:\n");
while(scanf("%d",&input) != ){
printf("input error,Please input again:\n");
while(getchar() != '\n'){
continue;
}
}
return input;
} /**
* 获取用户输入字符串的第一个字符
*/
char get_first(void){
char ch;
ch = getchar();
//清空输入队列中的其他字符
while(getchar() != '\n'){
continue;
}
return ch;
} char get_choice(void){
char ch;
printf("Enter the letter if your choice:\n");
printf("a. advice b. bell\n");
printf("c. count q. quit\n");
ch = get_first();
while((ch < 'a' || ch > 'c') && ch != 'q'){
printf("Please choice a b c or q\n");
ch = get_first();
}
return ch;
} void count(void){
int n,i;
printf("Count how far? Enter a integer:\n");
n=get_int();
for(i=;i<=n;i++){
printf("%d\n",i);
}
while(getchar() != '\n'){
continue;
}
}

C语言--scanf的更多相关文章

  1. C语言 scanf()和gets()函数的区别

    C语言 scanf()和gets()函数的区别 1.相同点:scanf( )函数和gets( )函数都可用于输入字符串 2.不同点:两者在功能上有所区别,具体区别如下: 要实现如下需求“从控制台输入字 ...

  2. C语言scanf与get char,gets的区别

    C语言scanf与get char,gets的区别 1.scanf() scanf是C语言的格式输入函数是通用终端格式化输入函数,它从标准输入设备(键盘) 读取输入的信息.可以读入任何固有类型的数据并 ...

  3. C语言scanf函数详细解释

    原文链接 函数名: scanf 功 能: 执行格式化输入 用 法: int scanf(char *format[,argument,...]); scanf()函数是通用终端格式化输入函数,它从标准 ...

  4. C语言Scanf函数

    C语言的scanf函数 一.变量的内存分析 (一)字节与地址 ①. 内存以字节为单位 每个字节都有自己的内存地址,根据地址就可以找到该字节.整个内存相当于一整个酒店,而酒店以房间为单位,在这里每个房间 ...

  5. [转载]VS2012编译C语言scanf函数error的解决方法

    在VS 2012 中编译 C 语言项目,如果使用了 scanf 函数,编译时便会提示如下错误: error C4996: 'scanf': This function or variable may ...

  6. C语言scanf函数详解

    函数名: scanf  功 能: 运行格式化输入  用 法: int scanf(char *format[,argument,...]); scanf()函数是通用终端格式化输入函数,它从标准输入设 ...

  7. c语言scanf详解

    函数名: scanf 功 能: 执行格式化输入 用 法: int scanf(char *format[,argument,...]);scanf()函数是通用终端格式化输入函数,它从标准输入设备(键 ...

  8. c语言:scanf()高级应用

    1) 指定读取长度 还记得在 printf() 中可以指定最小输出宽度吗?就是在格式控制符的中间加上一个数字,例如,%10d表示输出的整数至少占用 10 个字符的位置: 如果整数的宽度不足 10,那么 ...

  9. 为什么C语言Scanf函数对字符串不要加 取地址运算符&

    原文1:http://www.360doc.com/content/16/0515/11/19455598_559288667.shtml 原文2:https://zhidao.baidu.com/q ...

随机推荐

  1. Android AsyncTask 源码解析

    1. 官方介绍 public abstract class AsyncTask extends Object  java.lang.Object    ↳ android.os.AsyncTask&l ...

  2. Android开发拾遗(一)用Wi-Fi连接adb

    可以用Wi-Fi通过标准的TCP/IP连接来连接Android设备. 这在开发监听USB相关事件的应用程序时会特别有用,原因是USB连接会起到干扰作用,比如USB的连接/断开事件. 首先要像通常一样用 ...

  3. php多文件上传数组 转换

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><meta ...

  4. Spark:利用Eclipse构建Spark集成开发环境

    前一篇文章“Apache Spark学习:将Spark部署到Hadoop 2.2.0上”介绍了如何使用Maven编译生成可直接运行在Hadoop 2.2.0上的Spark jar包,而本文则在此基础上 ...

  5. CMMI能搭救企业吗?

    曾经有朋友跟我提起,他们公司突然有人关注我了,我自然很开心了,看来我名声在外了,哈哈!但我的朋友说,他是这样关注的:“他怎么还在那个公司?他们不是过了5级了吗?我们公司过了级后,EPG(Enginee ...

  6. jquery bootgrid 一个很好的 数据控件,可用于任何语言

    http://www.jquery-bootgrid.com/Examples#command-buttons 效果很好,http://www.open-open.com/lib/view/open1 ...

  7. VS发布,应用程序验证未成功。无法继续。

    用VS2005发布客户端程序. 1.发布:点击工程项目属性,右键发布按钮,一切正常. 2.测试安装:提示如下提示框: 打开详细信息内容如下: 错误摘要 以下是错误摘要,这些错误的详细信息列在该日志的后 ...

  8. Linux hostname对Oracle实例以及监听的影响

    在Linux平台中,对hostname的修改,是否对ORACLE数据库实例或监听进程有影响呢?如果有影响,又要如何解决问题呢?另外/etc/hosts下相关内容的修改,是否也会影响实例或监听呢?这里涉 ...

  9. ORA-00030: User session ID does not exist.

    同事在Toad里面执行SQL语句时,突然无线网络中断了,让我检查一下具体情况,如下所示(有些信息,用xxx替换,因为是在处理那些历史归档数据,使用的一个特殊用户,所以可以用下面SQL找到对应的会话信息 ...

  10. Sql Server之旅——第二站 理解万恶的表扫描

    很久以前我们在写sql的时候,最怕的一件事情就是sql莫名奇妙的超级慢,慢的是撸一管子回来,那个小球还在一直转...这个着急也只有当事人才 明白,后来听说有个什么“评估执行计划“,后来的后来才明白应该 ...