老牛来学习 发表于 2020-7-7 17:11:27

scanf问题

这段代码,如果我输入10A10的话,打印出来的就是10,A,10;
但是我并没有用分隔符标明输入的字符10A10对应的是哪一个,scanf是如何操作的?
平时如果使用%d%d%d来控制输入格式时,你每写一个就要敲一下空格,为什么下面代码不用?

#include<stdio.h>

int main()
{
    int a,b;
    char c;
    scanf("%d%c%d",&a,&c,&b);
    printf("%d,%c,%d",a,c,b);
}

Shuranima 发表于 2020-7-7 17:11:28

本帖最后由 Shuranima 于 2020-7-7 20:17 编辑

scanf是以%(格式字符)来判断输入,如%d则是整型,而scanf则是以空格作为分割符,用来分隔多个变量,而一个例外则是使用%c字符型。
scanf("%d%c%d",&a,&b,&c);
10A10输入后按回车则会将10A10\n输入缓冲区,第一个%d接受10后,判断出A不为int型变量则结束不接手A,%c接则接受A,最后一个%d接受10后判断\n为回车则自然结束。
又例如你所说的为什么这样3个%d需要空格
scanf("%d%d%d",&a,&b,&c);
1 2 3 这样输入才能判断出1为a变量2为b变量3为c,以空格进行分割各个变量。
总的来说就是scanf会根据你的格式字符来进行判断接收。

Hello. 发表于 2020-7-7 18:34:04

这里使用 %d%c%d
10 当然 是 %d , A 则是 %c
点我了解scanf函数详细用法

巴巴鲁 发表于 2020-7-7 18:55:46

平时需要敲空格是因为scanf是("%d %c %d",&a, &c, &b)这里没有加空格
scanf那几个中间隔的什么,输入时就需要打什么,如scanf(%d-%c-%d),你输入时必须输入10-A-10才能打印出10,A,10

老牛来学习 发表于 2020-7-7 19:47:14

Hello. 发表于 2020-7-7 18:34
这里使用 %d%c%d
10 当然 是 %d , A 则是 %c
点我了解scanf函数详细用法

"%d%d%d"是按十进值格式输入三个数值。输入时,在两个数据之间可以用一个或多个空格、tab键、回车键分隔。
这是你这个文章里说的,我的问题好像里面没有说。输入时两个数据之间用一个或多个空格等分割。但是我输入的时候只在末尾用了空格。而且数字也可以输入进字符型啊。

Hello. 发表于 2020-7-7 19:56:47

scanf 没加空格吖
多输出几次不就可以发现,你加空格之后根本输出不了
页: [1]
查看完整版本: scanf问题