C語言初學者問題。

請各位看一下下面程式。這主要是計算長方形/正方型面積的程式:

#include <stdio.h>

int main()

{

double b, c, a;

char u;

printf("Welcome! This program caculates the Area of a rectangle\n");

printf("Please enter the sides in the following form:\n");

printf("XX YY\n");

scanf("%lf %lf", &b, &c);

a= b*c;

printf("Now, please enter the units:\n");

scanf("%c", &u);

if (b > c)

{

printf("Here is your length:%.1lf %c \n", b, u);

printf("Here is your width:%.1lf %c \n", c, u);

}

if ( b < c)

{

printf("Here is your length:%.1lf%c \n", c, u);

printf("Here is your width:%.1lf%c \n", b, u);

}

else

{

printf("Here is your side:%.1lf%c \n", c, u);

}

printf("And here is your Area: %.1lf %c square.\n", a, u);

printf("Thank you");

return 0;

}

我試著讓使用者先輸入長、寬(根據數值大小決定什麼是長、什麼是寬,又或者是正方形),接著要他們輸入單位(兩個英文字母,向是cm之類的)。

可是不知道為什麼,我的程式在輸入完長、寬後會自動跳過scanf("%c", &u);,請問要怎麼修改比較好呢?

Update:

出問題的好像只有%c的部分。其它部分經過測試都沒有問題。

1 Answer

Rating
  • 丸子
    Lv 4
    1 decade ago
    Favorite Answer

    1. scanf()的陷阱造成的問題

    printf("XX YY\n");

    scanf("%lf %lf", &b, &c);

    雖然你從 standard input 輸入XX YY, 實際上鍵入的值卻是 XX YY 和(跳行),

    XX YY 雖然從buffer中被擷取走了, 可是"\n" 卻還留在 buffer中,

    這導致在下一次 scanf() 時, "\n" 反而先被擷取走, 因而影響到 u 接收值,

    程式接收到"\n"以為是string end, 於是便結束scanf()的動作, 因此就跳到下一行

    指令執行了.

    解決的方式:

    a= b*c;

    printf("Now, please enter the units:\n");

    getchar();

    /* 在這邊插入 getchar()讓"\n"先被讀出, 或是利用 fflush(stdin) 將

    input buffer清空; 需注意的是 fflush(stdin) 並不在 ANSI/ISO C standard

    定義的標準範圍內, 某些 compiler 並不支援 fflush(stdin), 例如 Unix/Linux

    gcc */

    scanf("%c", &u);

    2. char u;

    宣告 u 是 single character, 可是你輸入的 unit如果是 "cm",

    應該會有問題吧? 請把 u 宣告成 array 或是用 pointer 修改過來吧.

Still have questions? Get your answers by asking now.