鱼C论坛

 找回密码
 立即注册
查看: 1536|回复: 6

[已解决]c语言scanf的问题

[复制链接]
发表于 2020-8-16 20:25:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
#include<math.h>
void main()
{
        int a,b;
  
        scanf("%d ",&a);
        scanf("%d ",&b);
        printf("%d %d\n",a,b);
   
}
为什么我要输入3个数字才行?
最佳答案
2020-8-17 13:27:08
  键盘输入 scanf() 函数是严格按照你在引号内的格式从缓冲区读取字符。一般情况下引号之间只写格式化要求,格式化内容要和输入内容一致,数与数、字符与字符之间可以用空格隔开,也可以用逗号隔开,否则就会出错。除了格式化操作符以外,不加任何其他字符,连空格都不要加。

  scanf () 在你输入一个数后,它是不会立即显示的,要等再接收到一个非(空格、制表符、回车)的输入scanf语句才结束。而且,最后输入的那个非(空格、制表符、回车)的东西是不会被这个scanf读进来的,而是留在输入流里。

  以下是百度百科的内容:
  scanf()是C语言中的一个输出函数。与printf函数一样,都被声明在头文件stdio.h里,因此在使用scanf函数时要加上#include <stdio.h>。(在有一些实现中,printf函数与scanf函数在使用时可以不使用预编译命令#include <stdio.h>。)它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-16 20:44:16 | 显示全部楼层
本帖最后由 Hello. 于 2020-8-16 20:45 编辑

#include<stdio.h>
#include<math.h>
int main()
{
        int a,b;
  
        scanf("%d",&a);
        scanf("%d",&b);
        printf("%d,%d\n",a,b);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-16 21:13:36 | 显示全部楼层
"%d "后面的空格在用%d时表示分格符,意思是说后面还有内容等你输入; 后面输入的内会遗留在缓中区。等下次你使用相关代码时才会从缓冲区中调出。
代码:
#include<stdio.h>
#include<math.h>
void main()
{
        int a,b;
                char c;
        scanf("%d ",&a); // %d内存存入a中。空格分格符表示后面还有内容待输入。
                scanf("%d ",&b); //%d b存入的是上一条scanf空格后面遗留在缓冲区的内容。同样空格分格符表示后面还有内容待输入。
                c = getchar(); // 取得上面一条scanf空格后面遗留在缓冲区的内容

                printf("%d %d\n",a,b);
                printf("%c\n",c);


}
"%d %d" 中间空间用%d时表示分格符,正确输入方式: 1 2 后遇'\n'回车结束。

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
ArmandXiao + 5 + 5 + 3 感谢!找到问题所在了

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-16 21:19:38 | 显示全部楼层
scanf("%d ",&b);
这句话中"%d "这个格式的意思是说是在读完一个整数后,格式中的空格还需要匹配一次有效的输入,即再次读入一个非 空格/tab/回车 的数据之后才正常返回
所以改为楼上的不加空格的格式就行了
详情可以百度 scanf加空格
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-17 13:27:08 | 显示全部楼层    本楼为最佳答案   
  键盘输入 scanf() 函数是严格按照你在引号内的格式从缓冲区读取字符。一般情况下引号之间只写格式化要求,格式化内容要和输入内容一致,数与数、字符与字符之间可以用空格隔开,也可以用逗号隔开,否则就会出错。除了格式化操作符以外,不加任何其他字符,连空格都不要加。

  scanf () 在你输入一个数后,它是不会立即显示的,要等再接收到一个非(空格、制表符、回车)的输入scanf语句才结束。而且,最后输入的那个非(空格、制表符、回车)的东西是不会被这个scanf读进来的,而是留在输入流里。

  以下是百度百科的内容:
  scanf()是C语言中的一个输出函数。与printf函数一样,都被声明在头文件stdio.h里,因此在使用scanf函数时要加上#include <stdio.h>。(在有一些实现中,printf函数与scanf函数在使用时可以不使用预编译命令#include <stdio.h>。)它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-17 13:33:25 | 显示全部楼层
#include<stdio.h>
#include<math.h>
void main()
{
        int a,b;
  
        scanf("%d ",&a);//去掉%d后的空格
        scanf("%d ",&b);//去掉%d后的空格
        printf("%d %d\n",a,b);
   
}
这样就可以正常运行
Snipaste_2020-08-17_13-34-03.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-26 01:59:39 | 显示全部楼层
这道题,有用到 math.h ? 我怎么看不出来呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 23:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表