2015-02-23 37 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