【C语言】连续使用多个scanf函数时输入数据

这篇具有很好参考价值的文章主要介绍了【C语言】连续使用多个scanf函数时输入数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一. 遇到的情况

在多次使用scanf函数时常常会出现下面的情况:

1.

运行下列代码:

#include<stdio.h>
int main()
{
     int a,b,c,x,y,z; 	
     scanf("%d,%d,%d",&a,&b,&c);
     scanf("%c%c%c",&x,&y,&z);
     printf("%d,%d,%d\n",a,b,c);
     printf("x=%c,y=%c,z=%c\n",x,y,z);
     return 0;
}

(1)有关回车(Enter)

从键盘中输入:

11,12,13

按回车(Enter)后输入:

ABC

按回车(Enter)后运行结果为:
scanf输入多个数据的格式,c语言

(2)有关空格

从键盘中输入(含空格):

11,12,13 ABC

按回车(Enter)后运行结果为:
scanf输入多个数据的格式,c语言

2.

运行下列代码:

#include<stdio.h>
int main()
{
     int a,b,c,x,y,z; 	
     scanf("%d,%d,%d",&a,&b,&c);
     scanf("x=%d,y=%d,z=%d",&x,&y,&z);
     printf("%d,%d,%d\n",a,b,c);
     printf("x=%d,y=%d,z=%d\n",x,y,z);
     return 0;
}

(1)有关回车(Enter)

从键盘中输入:

11,12,13

按回车(Enter)后运行结果为:
scanf输入多个数据的格式,c语言

(2)有关空格

从键盘中输入(含空格):

11,12,13 x=14,y=15,z=16

按回车(Enter)后运行结果为:
scanf输入多个数据的格式,c语言

很明显上面几种情况的运行结果与预期结果不符

二.原因

(1)有关回车

当用户在输入数据时按下回车键,scanf函数会将回车符作为输入字符之一,并将其吸收到缓冲区中。如果后续的scanf函数读取字符时遇到了回车符,它会将其作为输入字符之一,而不是将其作为输入结束语

(2)有关空格

在后续的scanf函数需要读取字符时,scanf函数会把空格作为输入字符之一。

三.解决办法(以第一种情况为例)

1.加空格

可以抵消输入的回车或满足scanf函数使用要求

 int main()
{
     int a,b,c,x,y,z; 	
     scanf("%d,%d,%d",&a,&b,&c);
     scanf(" %c%c%c",&x,&y,&z);
     printf("%d,%d,%d\n",a,b,c);
     printf("x=%c,y=%c,z=%c\n",x,y,z);
     return 0;
}

运行结果:
scanf输入多个数据的格式,c语言
scanf输入多个数据的格式,c语言

2.数字后紧接字母

数字后紧接字母,不要空格也不要回车。因为数字和字母是能够被区分开来的

int main()
{
    int a,b,c,x,y,z; 	
    scanf("%d,%d,%d",&a,&b,&c);
    scanf("%c%c%c",&x,&y,&z);
    printf("%d,%d,%d\n",a,b,c);
    printf("x=%c,y=%c,z=%c\n",x,y,z);
    return 0;
}

从键盘中输入:

11,12,13ABC

运行结果:
scanf输入多个数据的格式,c语言

3.将需读取字母的scanf函数放到最前面

#include<stdio.h>
int main()
{
     int a,b,c,x,y,z; 	
     scanf("%c%c%c",&x,&y,&z);
     scanf("%d,%d,%d",&a,&b,&c);
     printf("%d,%d,%d\n",a,b,c);
     printf("x=%c,y=%c,z=%c\n",x,y,z);
     return 0;
}

运行结果:
scanf输入多个数据的格式,c语言
scanf输入多个数据的格式,c语言

4.使用getchar();

使用scanf函数后使用getchar();。可以清除输入缓冲区中的回车符或清除空格

#include<stdio.h>
int main()
{
     int a,b,c,x,y,z; 	
     scanf("%d,%d,%d",&a,&b,&c);
     getchar(); 
     scanf("%c%c%c",&x,&y,&z);
     printf("%d,%d,%d\n",a,b,c);
     printf("x=%c,y=%c,z=%c\n",x,y,z);
     return 0;
}

运行结果:
scanf输入多个数据的格式,c语言
scanf输入多个数据的格式,c语言

5.使用fflush(stdin)函数

使用scanf函数后使用fflush(stdin)函数。可清除输入缓冲区,避免回车对后续读取字符的影响。(无法清除空格)

#include<stdio.h>
int main()
{
     int a,b,c,x,y,z; 	
     scanf("%d,%d,%d",&a,&b,&c);
     fflush(stdin); 
     scanf("%c%c%c",&x,&y,&z);
     printf("%d,%d,%d\n",a,b,c);
     printf("x=%c,y=%c,z=%c\n",x,y,z);
     return 0;
}

运行结果:
scanf输入多个数据的格式,c语言

6.使用while(getchar()!='\n');

使用scanf函数后加上while(getchar()!='\n');。可以清除输入缓冲区中的回车符。(无法清除空格)

#include<stdio.h>
int main()
{
     int a,b,c,x,y,z; 	
     scanf("%d,%d,%d",&a,&b,&c);
     while(getchar()!='\n'); 
     scanf("%c%c%c",&x,&y,&z);
     printf("%d,%d,%d\n",a,b,c);
     printf("x=%c,y=%c,z=%c\n",x,y,z);
     return 0;
}

运行结果:
scanf输入多个数据的格式,c语言文章来源地址https://www.toymoban.com/news/detail-740584.html

到了这里,关于【C语言】连续使用多个scanf函数时输入数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言(输入输出函数getchar,putchar、gets、puts,scanf,printf的功能以及用法)

    int getchar( void ); 返回值为int,所以需要用一个int变量来接收,不管输入几个字符,每次都只接收第一个字符,常与while和putchar配合使用。 从下面这张图可以看出,输入一个空格也会打印 当然,获取一个字符用得不多,每次都需要获取一串,所以我们可以配合while来使用。 用

    2024年02月02日
    浏览(40)
  • C++中的输入函数scanf使用方法详解

    一、scanf的基本用法 scanf函数是C和C++中常用的输入函数之一,可以从用户输入的标准输入流stdin中读取格式为指定类型的数据。其基本用法如下: 在上面的示例中,我们使用了scanf函数读取用户输入的整数,并通过printf输出了读取到的整数a的值。 需要注意的是,在对指针参数

    2024年02月07日
    浏览(22)
  • printf和scanf的串口重定向,格式化输入输出

    通过重定向C标准库的printf和scanf函数,实现串口的格式化输出; 调用MDK微库(MicroLib)的方法和调用标准库的方法。 我们使用的正点原子STM32F103RB NANO开发板上将USART1(引脚为PA9,PA10)接出 USART1并没有在PCB上连接在一起,需要通过跳线帽来连接一下。这里我们把 P5 的 RXD 和 TXD 用

    2024年02月04日
    浏览(42)
  • 【C语言】scanf多组输入的三种方法!

    🎬 鸽芷咕 :个人主页  🔥 个人专栏 :《C语言初阶篇》 《C语言进阶篇》 ⛺️生活的理想,就是为了理想的生活!    🌈 hello! 各位宝子们大家好啊,相信大家都多多少少了用过scanf语句吧,但是对scanf函数没有全面的认识仅仅只是知道可以输入。    ⛳️ 今天博主就给大

    2024年02月06日
    浏览(36)
  • 【C语言】scanf和strcpy这类关键字和函数为什么不安全,使用VS编译会报错

    首先先说解决方法: 在程序最顶端加入这个代码段 这主要是微软的 C 运行时库实现将这些函数标记为不安全,主要原因是这些函数缺乏对输入长度的边界检查,容易导致缓冲区溢出漏洞。 会产生这样的报错: 即: C4996    \\\'strcpy\\\': This function or variable may be unsafe. Consider usin

    2024年02月14日
    浏览(48)
  • 【C语言基础考研向】05 scanf读取标准输入超详解

    文章目录 一.scanf函数的原理 样例 问题原因 解决方法 二.多种数据类型混合输入 错误样例 正确样例   C语言未提供输入/输出,其输入和输出是通过标准函数库来实现的。C语言通过scanf函数读取键盘输入, 键盘输入又被称为标准输入 。当scanf函数读取标准输入时,如

    2024年01月22日
    浏览(37)
  • C 语言用户输入详解:scanf、fgets、内存地址解析及实用指南

    您已经学习了 printf() 函数用于在 C 语言中输出值。 要获取用户输入,可以使用 scanf() 函数: scanf() 函数接受两个参数:变量的格式说明符(在本例中为 %d )和引用运算符( myNum ),用于存储变量的内存地址。 scanf() 函数还允许进行多个输入(例如,在下面的例子中,用户可

    2024年02月03日
    浏览(45)
  • 【C语言】EOF搭配while循环来控制scanf输入的次数

    目录 EOF是什么? EOF搭配while的实际应用场景1 EOF搭配while的实际应用场景2 补充 后言 EOF , 在C语言的标准函数库中表示 文件结束符 (end of file)。在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件,必须是文本文件。 在文本文件中,数据都是以字符的ASC

    2024年02月10日
    浏览(27)
  • 【C语言趣味教程】(8) 标准 IO 流:输入和输出 | 标准输入 stdin | 标准输出 stdout | 详解 printf 和 scanf | 探讨 scanf 缓冲区问题和安全性问题

        🔗 《C语言趣味教程》👈 猛戳订阅!!! 0x00 引入:I/O 的概念 计算机中的输入和输出,简称 ,其中:  代表 Input,即输入。

    2024年02月09日
    浏览(37)
  • 爱上C语言:scanf、gets以及getchar输入字符串你真的懂了吗

    🚀 作者:阿辉不一般 🚀 你说呢: 不服输的你,他们拿什么赢 🚀 专栏:爱上C语言 🚀 作图工具:draw.io ( 免费开源的作图网站) 如果觉得文章对你有帮助的话,还请点赞,关注,收藏支持博主,如有不足还请指点,博主及时改正,感谢大家支持!!! 大家好啊😉!今天阿

    2024年02月05日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包