[問題] C用法的限制???

看板C_and_CPP作者 ( )時間14年前 (2009/11/20 18:17), 編輯推噓6(6010)
留言16則, 5人參與, 最新討論串1/2 (看更多)
不知道是邏輯上的問題 還是C用法的限制 請大家幫忙解惑一下 程式碼如下 01 struct mydata 02 { 03 char name[15]; 04 int num; 05 }stu; 06 07 puts("what's ur name >>"); 08 gets(stu.name); 09 10 puts("what's ur num >>"); 11 scanf("%d",&stu.num); 12 13 printf("num = %d, name = %s ",stu.num,stu.name); 這樣很正常 但如果把程式改成這樣 puts("what's ur num >>"); scanf("%d",&stu.num); puts("what's ur name >>"); gets(stu.name); 先輸入號碼後輸入名字 這樣反而會發生 無法輸入名字的狀況 當然我知道可以將 gets 換 scanf 但是為什麼放在這邊就不行 是邏輯上的問題嗎? 謝謝 -- 新手本版第一篇 請多包含.... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.68.80.164

11/20 18:18, , 1F
第二種寫法的後面多一行 getchar(); 試試....
11/20 18:18, 1F

11/20 18:19, , 2F
像是原生數值型態與char string交互輸入時的老問題@_@"
11/20 18:19, 2F

11/20 18:19, , 3F
scanf("%d\n",&stu.num); 這樣呢?
11/20 18:19, 3F

11/20 18:20, , 4F
忘了還有樓上這一招^^||
11/20 18:20, 4F

11/20 18:28, , 5F
B大 你的方法跑出來很妙喔~ :P 會變成先輸入名字,然後才
11/20 18:28, 5F

11/20 18:29, , 6F
跑出說 What's ur name >> XD
11/20 18:29, 6F

11/20 18:34, , 7F
V大 可以問一下理由嗎?為什麼會這樣?
11/20 18:34, 7F

11/20 20:21, , 8F
因為換行也是某種字元, 就像我2F推的那樣....@_@"
11/20 20:21, 8F

11/20 20:33, , 9F
scanf不會讀enter 就會留給下一個函式讀
11/20 20:33, 9F

11/20 20:43, , 10F
其實小弟我不懂的是, Enter塞回去給下一個讀的狀況, 那
11/20 20:43, 10F

11/20 20:44, , 11F
我後面如果都是讀數字的scanf為什麼就不會Enter塞住??
11/20 20:44, 11F

11/20 20:44, , 12F
應該有些人有經驗, 要讀數字時餵英文字, 就塞爆了@_@"
11/20 20:44, 12F

11/20 21:21, , 13F
只要有enter就能讓gets()終止,這是其本質。
11/20 21:21, 13F

11/20 21:22, , 14F
而scanf的本質是去輸入緩衝區做一個正規表示?的抓取
11/20 21:22, 14F

11/20 21:23, , 15F
你寫 scanf("1"); 時,是要抓完1,他也只會抓1,其他不
11/20 21:23, 15F

11/20 21:24, , 16F
會去改變,留在原地。即使你心裡想說enter是過去式了
11/20 21:24, 16F
文章代碼(AID): #1B1coV7G (C_and_CPP)
文章代碼(AID): #1B1coV7G (C_and_CPP)