scanf的用法

今天上论坛看到有人问的关于C语言代码中的问题,发现出现了在scanf函数中带有'\n',记得当年刚开始学得时候,也出现过类似的问题,然后看到有人归纳了scanf的用法,就转载到自己的blog以方便以后可以复习。

*****************************************************************************************************************************************************************************************

转载自http://blog.youkuaiyun.com/u012421456/article/details/18501309


scanf()【通过键盘将数据输入到变量中】

它有两种用法:

用法一: scanf“输入控制符”,输入参数);

功能:  将从键盘输入的字符转化为输入控制符所规定格式的数据,然后存入已输入参数的值为地址的变量中。

例如:

[plain]  view plain copy
  1. # include <stdio.h>  
  2.    
  3. int main(void)  
  4. {  
  5.     int i;  
  6.     scanf("%d",&i);//如果输入123  
  7.     printf("i=%d\n",i);//输出结果为i=123  
  8.     return 0;  
  9. }  

用法二: scanf(“非输入控制符 输入控制符”,输入参数);

功能: 将从键盘输入的字符转化为输入控制符所规定格式的数据,然后存入已输入参数的值为地址的变量中(非输入控制符必须原样输入)。

例如:

[plain]  view plain copy
  1. # include <stdio.h>  
  2.    
  3. int main(void)  
  4. {  
  5.     int i;  
  6.     scanf("m%d",&i);//输入m123正确,输入123错误  
  7.     printf("i=%d\n",i);//输入m123,输出结果为i=123  
  8.     return 0;  
  9. }  

另外,需要注意的是,使用scanf之前最好再使用printf进行操作说明(即提示用户以什么样的方式进行输入)

例如:

[plain]  view plain copy
  1. # include <stdio.h>  
  2.    
  3. int main(void)  
  4. {  
  5.     int i,j;  
  6.    
  7.     printf("请输入两个数,中间用空格或回车隔开:");  
  8.     scanf("%d %d",&i,&j);//输入的两个数之间是空格或回车  
  9.     //scanf("%d,%d",&i,&j);//输入的两个数之间是逗号(逗号是一个非输入控制符,非输入控制符必须原样输出)  
  10.     printf("i=%d j=%d\n", i, j);  
  11.    
  12.     return 0;  
  13. }  
  14.    

还有,scanf中尽量不要使用非输入控制符,尤其不要使用 \n

例如:

[plain]  view plain copy
  1. # include <stdio.h>  
  2.    
  3. int main(void)  
  4. {  
  5.     int i,j;  
  6.    
  7.     //使用scanf之前最好先使用printf进行一个操作说明,另外scanf中尽量不要使用非输入控制符,尤其不要用\n  
  8.     printf("请输入两个值,中间用空格或回车隔开:");  
  9.     //scanf("%d %d\n",&i,&j);//在scanf中不要使用\n,这样不好  
  10.     scanf("%d %d",&i,&j);//输入的两个数之间是空格或回车  
  11.     //scanf("%d,%d",&i,&j);//输入的两个数之间是逗号              逗号是一个非输入控制符,非输入控制符必须原样输出  
  12.   
  13.     printf("i=%d j=%d\n", i, j);  
  14.    
  15.     return 0;  
  16. }  

最后,为了防止当程序中有多个输入时,用户在前边的输入有误导致影响到下面的输入,我们可以在输入的后边添加一个

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

continue;   

例如:

[plain]  view plain copy
  1. # include <stdio.h>  
  2.    
  3. int main(void)  
  4. {  
  5.     int i;  
  6.     char ch;//添加字符数据  
  7.    
  8.     scanf("%d",&i);  
  9.     printf("i = %d\n",i);  
  10.    
  11.     while ( (ch=getchar()) != '\n')//把用户前边的非法输入消除!!!  
  12.     continue;                      //重点!  
  13.     int j;  
  14.     scanf("%d",&j);  
  15.     printf("j=%d",j);  
  16.    
  17.     return 0;  
  18. }  

好了, 以上就是scanf的基本用法 ,第一次写博客感觉有些吃力,相信以后会好一些

 【所有代码均在window系统下VC6.0下运行通过】

(如有错误,敬请指正)


### C语言 `scanf` 函数使用教程 #### 什么是 `scanf`? `scanf` 是 C 语言标准库中的一个重要输入函数,用于从标准输入设备(通常是键盘)读取数据并将其存储到指定变量中。它的功能强大,支持多种数据类型的输入以及格式化控制[^2]。 --- #### 基本语法 以下是 `scanf` 的基本语法: ```c int scanf(const char *format, ...); ``` - **参数说明**: - `const char *format`: 表示输入的格式字符串,定义如何解析输入的数据。 - `...`: 可变参数列表,表示要接收输入的具体变量地址(通过指针传递)。 - **返回值**:成功时返回成功匹配和赋值的项目数;如果到达文件结束符或者发生读取错误,则返回 EOF。 --- #### 格式化字符 `scanf` 支持多种格式化字符来处理不同类型的输入数据: | 格式化字符 | 描述 | |------------|--------------------------| | `%d` | 输入十进制整型 | | `%f` | 输入浮点型 | | `%c` | 输入单个字符 | | `%s` | 输入字符串 | | `%lf` | 输入双精度浮点型 | 更多高级选项可以参考具体文档或扩展资料[^1]。 --- #### 示例代码 ##### 示例 1: 整数输入 以下是一个简单的例子,演示如何使用 `scanf` 来获取用户的年龄输入: ```c #include <stdio.h> int main() { int age; printf("请输入您的年龄:"); scanf("%d", &age); // 注意需要传入变量的地址 printf("您输入的年龄是:%d\n", age); return 0; } ``` ##### 示例 2: 浮点数输入 下面的例子展示了如何接受用户输入的一个浮点数值: ```c #include <stdio.h> int main() { float salary; printf("请输入您的月薪:"); scanf("%f", &salary); printf("您输入的月薪是:%.2f\n", salary); return 0; } ``` ##### 示例 3: 字符串与多个变量混合输入 此示例展示了一个更复杂的场景——同时输入姓名、年龄和薪水: ```c #include <stdio.h> int main() { char name[50]; int age; float salary; printf("请输入您的名字、年龄和月薪 (用空格分隔):"); scanf("%s %d %f", name, &age, &salary); printf("您好,%s! 您今年%d岁, 薪水为%.2f。\n", name, age, salary); return 0; } ``` --- #### 注意事项 尽管 `scanf` 功能强大,但在实际编程过程中需要注意一些常见陷阱: 1. **缓冲区溢出**: 如果输入超出预期长度,可能会导致程序崩溃或未定义行为。例如,在输入字符串时应限制最大长度,如 `%49s`。 2. **多余空白字符的影响**: 当前一个输入项留有回车或其他空白字符时,可能会影响后续输入操作。可以通过在格式字符串开头加空格解决这个问题。 修改后的格式字符串如下所示: ```c scanf(" %c", &ch); // 加上前置空格忽略多余的空白字符 ``` 3. **不一致的类型匹配**: 提供给 `scanf` 的参数类型必须与其对应的格式化描述相匹配,否则可能导致不可预测的行为。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值