0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C语言中scanf函数的常见问题

单片机与嵌入式 来源:单片机与嵌入式 2023-04-23 09:43 次阅读

在写C代码时难免对一些知识点不熟悉,导致犯错,今天分享几点小知识给大家。

空白符问题

#include


int main(void)
{
  int a;
  printf("input the data ");
  scanf("%d ",&a);  //这里多了一个回车符
  printf("%d",a);
  return 0;
}

结果要输入两个数程序才结束,而不是预期的一个。why?

原因

用空白符结尾时,scanf会跳过空白符去读下一个字符,所以你必须再输入一个数。这里的空白符包括空格,制表符,换行符,回车符和换页符。所以如果你用scanf("%d ",&a)也会出现同样的问题。

解决方法

这种错误大多是输入的时候不小心,多注意一点就好了。这种问题也不好检查,编译没有问题,一个空格也不容易看出来。当你的程序出现上面的问题时,自己对照检查一下就可以了。


回车符也占位

#include 
main()
{
 int n = 5;
 char c[n];
 for(int i = 0; i < n; i++)
  c[i] = scanf("%c",&c[i]); 
 printf(c);
return 0;
}

如果输入:

a
b
c

那么循环就会“提前”结束了。

原因

输入a和第一个回车后,a和这个回车符都留在缓冲区中。第一个scanf读取了a,但是输入缓冲区里面还留有一个 ,第二个scanf读取这个 。然后输入b和第二个回车,同样的,第三个scanf读取了b,第四个scanf读取了第二个回车符。第五个读取了c。所以五个scanf都执行了,并没有提前结束。只不过有的scanf读取到了回车符而已。

解决方法

1.不输入回车符,直接输入字符。 2.用gets()函数,如:

#include
main()
{   
 char c[5];
 gets(c);
 printf(c);
 return 0;
}

scanf()函数的参数输入类型不匹配问题

在某度见到的问题:

#include
main()
{
 int a=123;
 char c='t';
 printf("input ");
 scanf("%d%c",&a,&c);
 scanf("%d%c",&a,&c);
 scanf("%d%c",&a,&c);
 printf("%d %c ",a,c);
 return 0;
}

当输入a 回车 后,会直接跳过下面2个scanf语句,直接输出为:

123
t

原因

对于scanf("%d%c",&a,&c),scanf语句执行时,其中有一个参数不匹配,那就从这个地方跳出,忽略这个scanf后面所有的参数,而去执行下一条语句。

解决方法

scanf()函数执行成功时的返回值是成功读取的变量数,也就是说,你这个scanf()函数有几个变量,如果scanf()函数全部正常读取,它就返回几。但这里还要注意另一个问题,如果输入了非法数据,键盘缓冲区就可能还有残余信息问题。

比如:

#include 
 main()
{
 int a=123,b;
 while(scanf("%d%d",&a,&b)!=2)
  fflush(stdin);
 printf("%d %d ",a,b);
 return 0;
}

还有个办法:只要用scanf("%[^ ]",strings); 就可以了。很神奇吧。还要注意方括号两侧都不能加空格。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    180

    文章

    7597

    浏览量

    136125
  • 程序
    +关注

    关注

    116

    文章

    3773

    浏览量

    80835
  • 函数
    +关注

    关注

    3

    文章

    4304

    浏览量

    62413
  • 编译
    +关注

    关注

    0

    文章

    653

    浏览量

    32803
  • C代码
    +关注

    关注

    1

    文章

    89

    浏览量

    14285

原文标题:C语言中scanf函数的常见问题

文章出处:【微信号:单片机与嵌入式,微信公众号:单片机与嵌入式】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    C语言中指针函数函数指针的概念及应用示例

    C语言中,指针函数函数指针是强大且常用的工具。它们允许我们以更灵活的方式处理函数和数据,进而扩展程序的功能。
    发表于 08-16 16:14 719次阅读

    C语言中函数的基本知识

    函数C语言中的基本构建块之一,它允许我们将代码组织成可重用、模块化的单元。
    发表于 08-16 18:25 508次阅读

    C语言常见问题

    C语言常见问题集,即C-FAQ。
    发表于 07-09 08:40

    C语言常见问题

    C语言常见问题汇总大集合
    发表于 05-10 21:37

    C语言常见问题

    C语言常见问题
    发表于 05-26 11:53

    C语言scanf函数详解

    C语言scanf函数详细解释
    发表于 05-15 09:20 6次下载

    基于495个C语言常见问题

    基于495个C语言常见问题
    发表于 10-13 10:18 2次下载
    基于495个<b class='flag-5'>C</b><b class='flag-5'>语言</b><b class='flag-5'>常见问题</b>集

    printf和scanf什么意思

    printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出信息。scanf()是C语言中的一个输入
    发表于 11-09 18:02 3.8w次阅读
    printf和<b class='flag-5'>scanf</b>什么意思

    剖析C语言中scanf函数常见问题

    在写C代码时难免对一些知识点不熟悉,导致犯错,今天分享几点小知识给大家。 空白符问题                     # include stdio.h int main ( void
    的头像 发表于 09-24 16:45 1552次阅读

    C语言常见问题

    C语言常见问题
    发表于 03-21 14:57 0次下载

    C语言常见问题

    电子发烧友网站提供《C语言常见问题集.pdf》资料免费下载
    发表于 11-18 10:29 0次下载
    <b class='flag-5'>C</b><b class='flag-5'>语言</b>的<b class='flag-5'>常见问题</b>集

    scanfC语言中的作用

    scanfC语言中的作用  scanfC语言中的输入函数
    的头像 发表于 11-23 14:13 1296次阅读

    c语言gets函数可以输入数字吗

    来了解一些与输入有关的C语言函数C语言提供了许多函数来从用户获取输入,包括
    的头像 发表于 11-24 10:00 1448次阅读

    c语言怎么用scanf输入字符串

    C语言中,我们可以使用scanf函数来接收用户的输入。scanf函数有很多种用法,其中一种用法
    的头像 发表于 11-24 10:03 2540次阅读

    c语言scanf的正确使用及技巧

    C语言scanf函数是用来从程序的标准输入或文件中读取输入的函数。它可以从键盘读取用户输入,并将其存储在变量中。虽然
    的头像 发表于 11-24 10:04 4759次阅读