[爆卦]scanf字串空白是什麼?優點缺點精華區懶人包

為什麼這篇scanf字串空白鄉民發文收入到精華區:因為在scanf字串空白這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者tfg09730820 (猴)看板C_and_CPP標題[問題] C語言,scanf 字元時間M...


問題(Question):

case 1和 case 2 裡,無法做第一次的輸入,會直接跳到第二次

預期的正確結果(Expected Output):

請設計一多載函式,函式有2個參數:(1)當2個參數都是字元時,則顯示該字元
(2)當參數的字元和整數x時,則顯示該字元x次,
(3)當2個參數都是整數時,則顯 示兩個數相乘的結果

錯誤結果(Wrong Output):

case 1 和 case 2 有問題,case 3則沒問題

程式碼(Code):(請善用置底文網頁, 記得排版)
http://ideone.com/api/embed.js/link/TnpbOU

#include<stdlib.h>
#include<stdio.h>

void aaa(char,char);
void aaa(char,int);
void aaa(int,int);


int main()
{
int num1,num2;
char a1,a2;
int key;
printf("1.兩字元,2.一字元一數字,3.兩數字\n");
scanf("%d",&key);
switch (key)
{
case 1:
printf("輸入第一個字元\n");
scanf("%c",&a1);
printf("輸入第二個字元\n");
scanf("%c",&a2);
aaa(a1,a2);
break;
case 2:
printf("輸入第一個字元\n");
scanf("%c",&a1);
printf("輸入第一個數字\n");
scanf("%d",&num1);
aaa(a1,num1);
break;
case 3:
printf("輸入第一個數字\n");
scanf("%d",&num1);
printf("輸入第二個數字\n");
scanf("%d",&num2);
aaa(num1,num2);
break;
}

system("pause");
return 0;
}

void aaa(char a1,char a2)
{
printf("%c,%c",a1,a2);
}

void aaa(char a1,int num1)
{
int i;
for(i=0;i<num1;i++)
printf("%c ",a1);
}

void aaa(int num1,int num2)
{
int ans;
ans=num1*num2;
printf("%d*%d=%d\n",num1,num2,ans);
}


--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.115.153.51
Feis:換行字元: scanf(" %c", ..); 07/15 11:11
tfg09730820:%c前面都要加空白是嗎,感謝 07/15 11:18
diabloevagto:你會直接跳第二次是因為讀到你按enter的訊號 07/15 11:20
tfg09730820:謝謝 07/15 11:23
loveme00835:"C語言" 不是關鍵字... 07/15 22:17
hbzncu:也可以在抓取字元的前面加上"fflush(stdin);"將緩衝區的資 07/15 23:51
hbzncu:料清空後就不會有抓到換行符號的問題 07/15 23:51
scwg:樓上請不要再教別人用 fflush(stdin) 了. 標準已經說 fflush 07/16 01:46
scwg:用在非 output stream 是 undefined behavior 07/16 01:46
johnhmj:char a3[128]; scanf("%s", a3); a3[1] = '\0'; 07/16 04:17
johnhmj:當成字串來取,如何? 07/16 04:18
hbzncu:抱歉...因為之前看書都是這樣用所以就習慣這樣用了! 07/17 00:14
DarkPrincex:不過用字串讀的缺點是讀不到空白字元(enter或空格類) 07/18 03:11
li751012:這個問題我也問過!感謝scwg大!正解加空白... 07/24 18:35

你可能也想看看

搜尋相關網站