有梦想大蜗牛 发表于 2020-8-16 20:25:18

c语言scanf的问题

#include<stdio.h>
#include<math.h>
void main()
{
        int a,b;

        scanf("%d ",&a);
        scanf("%d ",&b);
        printf("%d %d\n",a,b);
   
}
为什么我要输入3个数字才行?

Hello. 发表于 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);
}

ba21 发表于 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'回车结束。

横者尊 发表于 2020-8-16 21:19:38

scanf("%d ",&b);
这句话中"%d "这个格式的意思是说是在读完一个整数后,格式中的空格还需要匹配一次有效的输入,即再次读入一个非 空格/tab/回车 的数据之后才正常返回
所以改为楼上的不加空格的格式就行了
详情可以百度 scanf加空格

风过无痕1989 发表于 2020-8-17 13:27:08

  键盘输入 scanf() 函数是严格按照你在引号内的格式从缓冲区读取字符。一般情况下引号之间只写格式化要求,格式化内容要和输入内容一致,数与数、字符与字符之间可以用空格隔开,也可以用逗号隔开,否则就会出错。除了格式化操作符以外,不加任何其他字符,连空格都不要加。

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

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

xxm8023 发表于 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);
   
}
这样就可以正常运行

乐乐学编程 发表于 2020-9-26 01:59:39

这道题,有用到 math.h ? 我怎么看不出来呀
页: [1]
查看完整版本: c语言scanf的问题