作者thorita ( )
看板C_and_CPP
標題[問題] C用法的限制???
時間Fri Nov 20 18:17:00 2009
不知道是邏輯上的問題 還是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
推 VictorTom:第二種寫法的後面多一行 getchar(); 試試.... 11/20 18:18
→ VictorTom:像是原生數值型態與char string交互輸入時的老問題@_@" 11/20 18:19
推 Bencrie:scanf("%d\n",&stu.num); 這樣呢? 11/20 18:19
→ VictorTom:忘了還有樓上這一招^^|| 11/20 18:20
→ thorita:B大 你的方法跑出來很妙喔~ :P 會變成先輸入名字,然後才 11/20 18:28
→ thorita:跑出說 What's ur name >> XD 11/20 18:29
→ thorita:V大 可以問一下理由嗎?為什麼會這樣? 11/20 18:34
推 VictorTom:因為換行也是某種字元, 就像我2F推的那樣....@_@" 11/20 20:21
推 mepass:scanf不會讀enter 就會留給下一個函式讀 11/20 20:33
推 VictorTom:其實小弟我不懂的是, Enter塞回去給下一個讀的狀況, 那 11/20 20:43
→ VictorTom:我後面如果都是讀數字的scanf為什麼就不會Enter塞住?? 11/20 20:44
→ VictorTom:應該有些人有經驗, 要讀數字時餵英文字, 就塞爆了@_@" 11/20 20:44
推 twotwoone:只要有enter就能讓gets()終止,這是其本質。 11/20 21:21
→ twotwoone:而scanf的本質是去輸入緩衝區做一個正規表示?的抓取 11/20 21:22
→ twotwoone:你寫 scanf("1"); 時,是要抓完1,他也只會抓1,其他不 11/20 21:23
→ twotwoone:會去改變,留在原地。即使你心裡想說enter是過去式了 11/20 21:24