[爆卦]puts c用法是什麼?優點缺點精華區懶人包

為什麼這篇puts c用法鄉民發文收入到精華區:因為在puts c用法這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者thorita ( )看板C_and_CPP標題[問題] C用法的限制???時間Fri Nov ...


不知道是邏輯上的問題 還是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

你可能也想看看

搜尋相關網站