当前位置:网站首页>问题:先后键入字符串和字符,结果发生冲突
问题:先后键入字符串和字符,结果发生冲突
2022-07-07 10:02:00 【CodeQingqing】
软件环境
Microsoft Visual Studio 2010
版本 10.0.40219.1 SP1Rel
问题简化
在工程中添加如下代码:
#include <stdio.h>
#define NameLength 10
int main()
{
char temp;
char name[NameLength];
printf("输入name:");
scanf("%d", name);
printf("输入temp:");
scanf("%c", &temp);
printf("name=%s\n", name);
printf("temp=%c\n", temp);
return 0;
}
运行结果如下:输入name
时,键入“李”,然后换行
Debug查看相关变量值:
通过百度ASCII码可知:temp
的值是换行符
分析
scanf
和printf
函数都是从数据流中读取数据,对于键入数据后面的间隔符(本例中是换行符),scanf
函数会将其放回输入流,即:下一次scanf
函数读取输入时,最先读取的是,上一次读取中被scanf
函数抛弃的间隔符。
这样就能够解释Debug时,temp
的值就是换行符
接下来将问题中的情况扩展,如果是以下情况,运行结果就有所不同:
- 问题中的情况是先用
scanf
函数键入字符串,后用scanf
函数键入单个字符:运行结果不正常,字符的值为间隔符。 - 先后两次用
scanf
函数键入单个字符:运行结果不正常,第二次字符的值为间隔符。 - 先后两次用
scanf
函数键入字符串:运行结果正常
建议
通过分析可以看出,不同情况下,间隔符对运行结果的影响不同。所以,作为解决问题的第一步,应该灵活使用编译器的Debug功能,通过查看相关变量的值,从而发现间隔符对最终运行结果是否有影响。
如果Debug后,发现间隔符对最终运行结果有影响,那就进入下面解决问题的第二步。
目前没有类似公式模板的代码,我试了很多demo
,也学习了参考链接里的方法,发现具体实现方法千奇百怪,但实现核心都是解决scanf
函数丢弃的间隔符。
所以,建议如下:
- 尽量不要让键入字符、键入字符串的语句前后相邻,否则很容易出现问题;
- 键入字符串用
gets
函数,键入单个字符用getchar
函数; - 可以自己研究一段代码逻辑,针对间隔符做出应对措施。
参考链接
边栏推荐
- MATLAB實現Huffman編碼譯碼含GUI界面
- Have you ever met flick Oracle CDC, read a table without update operation, and read it repeatedly every ten seconds
- 一起探索云服务之云数据库
- [full stack plan - programming language C] basic introductory knowledge
- 超标量处理器设计 姚永斌 第8章 指令发射 摘录
- Rationaldmis2022 advanced programming macro program
- VIM command mode and input mode switching
- 从工具升级为解决方案,有赞的新站位指向新价值
- Rationaldmis2022 array workpiece measurement
- Swiftui tutorial how to realize automatic scrolling function in 2 seconds
猜你喜欢
软件内部的定时炸弹:0-Day Log4Shell只是冰山一角
112.网络安全渗透测试—[权限提升篇10]—[Windows 2003 LPK.DDL劫持提权&msf本地提权]
Half of the people don't know the difference between for and foreach???
超标量处理器设计 姚永斌 第8章 指令发射 摘录
What is cloud computing?
About how to install mysql8.0 on the cloud server (Tencent cloud here) and enable local remote connection
[texture feature extraction] LBP image texture feature extraction based on MATLAB local binary mode [including Matlab source code 1931]
STM32F1与STM32CubeIDE编程实例-MAX7219驱动8位7段数码管(基于SPI)
Visual Studio 2019 (LocalDB)\MSSQLLocalDB SQL Server 2014 数据库版本为852无法打开,此服务器支持782版及更低版本
【全栈计划 —— 编程语言之C#】基础入门知识一文懂
随机推荐
How to write test cases for test coupons?
The annual salary of general test is 15W, and the annual salary of test and development is 30w+. What is the difference between the two?
通过环境变量将 Pod 信息呈现给容器
清华姚班程序员,网上征婚被骂?
QT | multiple windows share a prompt box class
The function of adding @ before the path in C #
Some opinions and code implementation of Siou loss: more powerful learning for bounding box regression zhora gevorgyan
5V串口接3.3V单片机串口怎么搞?
Solve the problem that vscode can only open two tabs
Superscalar processor design yaoyongbin Chapter 8 instruction emission excerpt
大佬们有没有人遇到过 flink oracle cdc,读取一个没有更新操作的表,隔十几秒就重复读取
Programming examples of stm32f1 and stm32subeide -315m super regenerative wireless remote control module drive
Technology sharing | packet capturing analysis TCP protocol
110.网络安全渗透测试—[权限提升篇8]—[Windows SqlServer xp_cmdshell存储过程提权]
请查收.NET MAUI 的最新学习资源
SwiftUI Swift 内功之如何在 Swift 中进行自动三角函数计算
【数据聚类】基于多元宇宙优化DBSCAN实现数据聚类分析附matlab代码
[system design] index monitoring and alarm system
Matlab implementation of Huffman coding and decoding with GUI interface
Poor math students who once dropped out of school won the fields award this year