scanf("%c",&c); scanf("%d",&i); scanf("%s",&m); printf("%c,%d,%s\n",c,i,m);
在前面有正确变量定义的情况下是这样的:456赋给了a,空格赋给了i,789赋给了m,后面的空格和123由于没有对应变量接收了,所以还留存在输入缓冲区里……
从键盘拍入的内容,在 “键盘缓冲区”,当拍了 Enter 键(平时喊它回车键)时,键盘 缓冲区 的内容 才被 送到 “输入缓冲区”。
scanf() 读数时 是到 “输入缓冲区” 取数,“输入缓冲区” 没内容 时,scanf() 等待。
scanf("%c",a+i) 这种格式,它在缓冲区 取单个字符,空格键也好,tab 键也好, Enter 键, 字母键也好,数字键也好,遇到什么 取什么。并不跳过 “空白”
所以,输入缓冲区 有 a白b白c白d回车时,它读入的 4 个 字符 是: a 白 b 白
反序 输出 就 没有 得到 预期要 的 结果。
scanf("%s",a+i) 这种格式,读入字符串,它以空白为分隔 符。
输入缓冲区 有 a白b白c白d回车时, 它读入的 4 个 字符串 是 "a" "b" "c" "d",
依次 存放地点 是 a[i], 即a[0],a[1],a[2],a[3].
双引号括起的叫字符串,例如 "a", 它实际上 含2个字符,一个是 a, 另一个是 字符串结束符 '\0'.
由于你连续输入,存放地点只移动了1 格,所以 读入 a[1] 时,a[1] 盖去了输入 a[0]时的 字符串结束符 '\0', 同样,a[2],a[3] 盖去了输入 a[1],a[2] 时的 字符串结束符 '\0',
char a[100] 里的实际内容 变 "abcd"。
这样 你 反序 输出 就 得到 预期要 的 结果。
如果 用 scanf(" %c",a+i) 输入格式,它会自动 以空白 为 输入数据 分隔符,
拍入 a白b白c白d回车时,它会得到 abcd 。
这样 你 反序 输出 也能 得到 预期 的 结果。
我来详细说一下:
scanf("%d,%d,%d",&a,&b,&c);中%d,%d,%d之间有逗号,在输入数据时也要加逗号,如果去掉逗号,输入时就不用逗号,而用空格,tab键或回车键将各个数据隔开。
所以空格是个很特殊的字符。
'4'给了c
i是整数,且56后面是空格,所以56(十进制)给了i
而空格后面是789加上空格 。所以"789"赋值给了m
后面的123不用管了。
希望给你帮助!
输出应该是:4,56,789
scanf("%c",&c); ---------> 读入一个字符'4',c = '4';
scanf("%d",&i); ---------> 读入一个整数,由于4已经被读入,所以读入整数56,i = 56;
scanf("%s",&m); ---------> 读入一个字符串,读入"789", m = "789"。
注意:scanf读取数据时,是以空格判断结束的。
scanf函数问题
在scanf中你最好不要用那么复杂的,你直接写scanf("%ld%ld\\n",&a,&b);就可以了,你的两个问题是,在scanf中出现的比如你的a=之类,这些在你要求输入的时候你也要打,比如你的意思是输入数字2,但是如果你写sccanf("a=%ld",&a);的话,那么你在输入的时候要打a=2,不能只打2。第二个...
stm32f407如何转canfd
用CUBEMX实现stm32f407zgt6的双can通讯,配一个canfd接口来转接canfd。tm32有两个can控制器,can1(主),和can2(从)。扫描隧道显微镜(Scanning Tunneling Microscope, 缩写为STM)是一种扫描探针显微术工具,扫描隧道显微镜可以让科学家观察和定位单个原子,它具有比它的同类原子力显微镜更加高的分辨率。...
can'f time be that the连词成句
can't、time、be、that、the连词成句:That can't be the time.那不是时间。
B-CAN和F-CAN有什么区别
一个是车身局域网控制总线,一个是快速总线(发动机),控制的地方不同。B_CAN是一种车身局域网控制总线,主要用于车门控制单元,灯光控制单元、雨刷控制等不是很重要的单元之间传输信号,传输速度在100Kbit\/s, 但不同车叫法不同,有的叫舒适系统CAN,有的叫K-CAN,但是PT-CAN叫法都是一样。f-can是...
can f ly英语怎么读?
can fly 会飞,能飞 发音:砍 夫赖
C语言编程的时候出现“程序已停止工作”的原因有哪些?
\/\/错误!\\x0d\\x0a这与在sccanf里没有加上“&”号的原因大致相同。\\x0d\\x0a指针问题属于程序逻辑错误,很多时侯编译器只会给你一个警告。要注意警告发生的位置自己是否有把握。如果你多次编译或忽视编译警告而进行链接,编译器会认为你对这些警告是有把握的,完全地信任了你,也就没有警告了。
| can f|y是哪个歌的歌词
有这句词的太多了,但现在能想起歌名的只有容祖儿《挥着翅膀的女孩》和英文版的《Proud Of You》
A'canA'can游戏机简介
尽管面临失败,A'Can的价值仍在追求者心中。2010年,A'Can终于被成功模拟,Mess模拟器开始支持它,虽然尚不完善,但至少让这款主机的部分遗产得以在今天的玩家中重现。作为1995年在台湾发布的16位主机,A'Can F-16是中国的第一台游戏机,但因定价过高(约1000多块人民币),软件匮乏,且面临32位机...
C语言编程的时候出现“程序已停止工作”的原因有哪些?
int * p = i; \/\/错误!这与在sccanf里没有加上“&”号的原因大致相同。指针问题属于程序逻辑错误,很多时侯编译器只会给你一个警告。要注意警告发生的位置自己是否有把握。如果你多次编译或忽视编译警告而进行链接,编译器会认为你对这些警告是有把握的,完全地信任了你,也就没有警告了。
本田fcan通讯故障是什么意思?
本田FCAN通讯故障指的是快速总线通信信号出现了问题。FCAN是发动机和变速箱控制器之间的通讯故障,也就是PCM(A\/T)的通讯故障。CAN是控制器局域网络(ControllerAreaNetwork,简称CAN),由德国BOSCH公司开发并成为国际标准(ISO11898),是国际上应用最广泛的现场总线之一。在北美和西欧,CAN总线协议已经...
宗政龙金鸡: scanf("%c",&c) 与 scanf(" %c",&c),后者只是在%前多了个空格,似乎没有什么区别,但使用起来区别是很大的.scanf()作单字符输入时规定只接收一个字符,但它却把回车符也作为字符对待的.这就造成程序中只有一个输入字符的scanf()语句时,问题还不大,但如果后面还跟着第二个scanf()字符输入语句,这个scanf()就把前面输入的驾车符当作输入字符了.这就在输入逻辑上造成了混乱,达不到人们预期的愿望.有了这个空格,因为scanf()是跳过空格读字符的,就回避了这个问题.实践证明,这个空格放在%c后面也不能达到目的.应当说,这也是比较巧妙的应用!
乔口区19898863446: C语言中 scanf("空格%c",&ch),这样写有好处吗 - ?
宗政龙金鸡: scanf()函数从输入流缓冲区中读取值的,而读取时遇到回车(\n)而结束的.带空格的scanf(" %c")表示要从输入流缓冲区读两个字符,一个给空格,一个给%c.为什么加空格呢,是因为回车符(\n)也在输入流缓冲区中,所以将\n赋值给空格,以让%c被正确赋值.否则,不加空格,回车符\n会被赋值给%c.所以不加空格,字符输入会出问题
乔口区19898863446: c语言中的scanf 函数的用法 - ?
宗政龙金鸡: 输出的值只是空格前面的字符是因为scanf函数的输入格式错误,输入参数的变量前需要加&.scanf("%s",s);改为scanf("%s",&s); scanf的用法是:scanf("格式控制字符串",输入参数一,输入参数二);格式控制字符串包含:格式控...
乔口区19898863446: C语言中scanf函数解释? - ?
宗政龙金鸡: scanf函数是输入函数……例如:scanf(''%d'',&c),就是这样用的就是从终端输入一个变量例如3,那么c的值就是3,如果是int *p=&c;那么scanf(''%d'',p),就是这样的类型,%d是定义变量C的数据类型!
乔口区19898863446: scanf("%d%*c",&q)在C语言中是什么意思 - ?
宗政龙金鸡: %*c中的*表示该输入项读入后不赋予任何变量,即跳过该输入值...而这里就是把回车符读入后忽略掉,以免影响后续输入.
乔口区19898863446: 两次输入scanf("%c", &ch); scanf("%c", &ch); 的含义?????? - ?
宗政龙金鸡: 上次的scanf("%d", &n); 会在输入缓冲区留下一个回车符,所以第一个scanf("%c", &ch);读取的是上次留在缓冲区的回车符,而不是用户输入的字符,第二个scanf("%c", &ch);才是读取用户输入的字符 用scanf输入数字后,如果下一次用scanf输入是%c格式,那么就会碰到上次留下的回车符,%d,%s没有这个问题,因为这两种格式会丢弃开头的回车
乔口区19898863446: scanf(%*c)是什么东西,c语言的 - ?
宗政龙金鸡: scanf(“%c”,c)表示将键盘输入的字符写入c.而加了星号,表示跳过.比如scanf(”%c %*c %c”,c1,c2),当写入A B C,则c1=A,c2=C.
乔口区19898863446: c语言scanf的用法, - ?
宗政龙金鸡: 在执行第二个scanf的时候其实是接收了一个回车符,打印的时候看不到,你在第二个scanf之前加一个getchar();或者在%c之前加一个空格就好使了.
乔口区19898863446: c语言scanf输入字符时scanf(“ %c”,&a[i])&到底加不加?还是字符串加,而字符不 - ?
宗政龙金鸡: char a[10];//望采纳!!!int i=0;//加&与不加&不关类型的事//以下是几种情况 scanf(" %c",a);//不加,, a是数组,这里a就表示数组a的首地址,所以不用加& scanf("%c",&a [ i ]);//得加 ,a[i]表示a数组的第i个元素,&a[i]就是取数组a的第i个元素的地址所以得加
乔口区19898863446: C语言中,在输入函数scanf中用到%*c有什么作用啊? - ?
宗政龙金鸡: 出现在输入输出函数中的%*c ,作用是在输入或输出时,跳过一个变量,例如:void main(){ int i=1,j=2,k=3; printf("%d,%*d,%d\n",i,j,k,i);/&#...