2015-02-23 30 views
-2

因此,無論何時我嘗試在gedit中編譯該程序,它都可以正常工作(沒有錯誤)。但是,當我嘗試使用./prgram執行它時,它只是跳到終端中的下一行。我不確定是否該程序無法正常工作,或者它與我的編譯器有關。謝謝! (這是一個家庭作業,與臨時演員這麼裸露的,因爲他們所必需的全部學分)程序將無錯地編譯,但不會執行。怎麼了? (在C)

#include <stdio.h> 
const double CEL = 32; 
const double KEL = 459.67; 

double FahToCel(double); 
double FahToKel(double); 

int main() 
    { 
    double cel; 
    double kel; 
    double faren; 
    char i[1] = "a"; 
    while (i == "a") 
    { 
     printf("Enter a temperature in farenheit(enter s to stop):\n"); 
     scanf("%lf\n", &faren); 
     printf("%lf Farenheit is equal to %lf Celsius, and %lf Kelvin\n", faren, FahToCel(cel), FahToKel(kel)); 
     if (kel <= -274) 
      printf("Atomic motion has stopped\n"); 
     else if ((kel >= -274) && (kel <= 273)) 
      printf("Water freezes here\n"); 
     else if ((kel >= 274) && (kel <= 280)) 
      printf("You'll need a sweater\n"); 
     else if ((kel >= 281) && (kel <= 294)) 
      printf("A bit chilly\n"); 
     else 
      printf("Ahh, that's better\n"); 
    } 
    return 0; 
} 

double FahToCel(double faren) 
{ 
    double cel; 
    cel = (faren - CEL) * 5/9; 
    return cel; 
} 

double FahToKel(double faren) 
{ 
    double kel; 
    kel = (faren + KEL) * 5/9; 
    return kel; 
} 
+0

如何你編譯它?你肯定不會在gedit中編譯它... – chris 2015-02-23 04:18:23

回答

0

Click Here To Run Your Program

#include <stdio.h> 
const double CEL = 32; 
const double KEL = 459.67; 

double FahToCel(double); 
double FahToKel(double); 
void clean_stdin(void); 
int main() 
    { 
    double cel; 
    double kel; 
    double faren; 
    char i = 'a'; 
    while (i != 'N') 
    { 
     printf("\nEnter a temperature in farenheit :\n"); 
     scanf("%lf", &faren); 
     printf("%lf Farenheit is equal to %lf Celsius, and %lf Kelvin\n", faren, FahToCel(cel), FahToKel(kel)); 
     if (kel <= -274) 
      printf("Atomic motion has stopped\n"); 
     else if ((kel >= -274) && (kel <= 273)) 
      printf("Water freezes here\n"); 
     else if ((kel >= 274) && (kel <= 280)) 
      printf("You'll need a sweater\n"); 
     else if ((kel >= 281) && (kel <= 294)) 
      printf("A bit chilly\n"); 
     else 
      printf("Ahh, that's better\n"); 
     printf("Do you want to Continue ? (N : Stop) : \n"); 
     clean_stdin(); 
     scanf("%c",&i); 
    } 
    return 0; 
} 

double FahToCel(double faren) 
{ 
    double cel; 
    cel = (faren - CEL) * 5/9; 
    return cel; 
} 

double FahToKel(double faren) 
{ 
    double kel; 
    kel = (faren + KEL) * 5/9; 
    return kel; 
} 

void clean_stdin(void) 
{ 
    int c; 
    do { 
     c = getchar(); 
    } while (c != '\n' && c != EOF); 
} 
+0

@Val Gocan-Paval,這是完美的解決方案嗎?讓我知道....你應該輸入N來停止循環 – 2015-02-23 04:46:41

+0

謝謝你的完美!我只想知道如何隱藏其他小數點。 – 2015-02-23 04:53:58

1

在你的程序中while (i == "a")條件不計算爲TRUE。所以它不會進入while循環,程序會執行return 0並退出。

要比較字符串,您應該使用strcmp()

另外,char i[1] = "a";會生成長度爲1的字符組,但您希望它的長度爲2個字符。一個用於'a',第二個用於'\0',使其成爲NULL終止字符串。

+0

在作業分配中,當用戶輸入一個字母時,循環必須停止,所以我認爲用一個字母初始化循環並且要求用戶輸入另一個字母如果他們希望取消該計劃將工作。 – 2015-02-23 04:27:11

+0

@ ValGocan-Paval關鍵是在C中,測試'i ==「a」'不**測試'i'是否是字符串'「a」' – 2015-02-23 04:28:38

1

在while循環ü可以使用...這...

while (i[0] == 'a') 

因此,它會檢查單個字符....

+0

@Val Gocan-Paval,Let me知道如果它解決....或在這裏評論....我將幫助解決你的家庭作業 – 2015-02-23 04:27:00

+0

@Val Gocan-Paval,你能告訴我你的程序定義....所以我可以做到這一點 – 2015-02-23 04:29:44

+0

寫一個該程序要求用戶輸入華氏溫度 。該程序應該讀取溫度 作爲一個雙精度型號並將其作爲參數傳遞給兩個函數: FahToCel()和FahToKel()。這些函數應該分別計算攝氏溫標 和Kelvin等效溫標(分別)。然後, 以小數點右邊的 兩位精度顯示所有三個溫度。您可以隨意在每個模塊內打印或根據需要構建打印功能。打印時,需要用 來確定每個值與它所代表的溫度值。 – 2015-02-23 04:36:11