2016-01-24 84 views
-3

所以我剛開始用發問反應 學習C語言編程和我決定讓我的程序修煉到最終用戶說出來應用開關,它關閉?

我首先應用如 - else語句,以便程序根據人的年齡作出反應。 然後,當我到達什麼是你最喜歡的顏色部分與開關語句它會剛剛按下任何按鈕時關閉。

我的代碼:

#include <stdio.h> 
#include <conio.h> 
#include <dos.h> 
#include <ctype.h> 

main() 
{ 

char name[25], c; 
int a; 
clrscr(); 

printf("Hello, whats your name? \n"); 
scanf("%s",name); 
printf("nice to meet you %s!!!\n"); 

printf("Whats your age?"); 
scanf("%d",&a"); 
    { 
     if((a <= 21) && (a >= 0)) 
     printf("Young!\n"); 

     else if((a <= 100) && (a >= 22)) 
     printf("old!\n"); 

     else 
     printf("that's not an age!\n"); 
    } 

printf("whats your favorite color? \n"); //this is where the program stops// 
scanf("%c",&c); 
    switch(tolower(c)){ 
    case 'r':printf("Fiery!");break; 
    case 'o':printf("oranggerrr!!");break; 
    . 
    . //basically applied the whole rainbow and put some reactions// 
    . 

getch(); 
return 0; 
} 
+0

我不確定我是否理解問題所在。 –

+1

這看起來像他/她在問爲什麼它的工作。寫在評論 – Shial

+0

對不起,我剛剛編輯。^- ^ – Mirisu

回答

0

好了,我編程序的在線here,做一些改變,因爲你給的程序只有在舊的Turbo C.

我整理彙總下面的程序:

#include <stdio.h> 
//#include <conio.h> 
//#include <dos.h> 
#include <ctype.h> 

main() 
{ 

char name[25], c; 
int a; 
//clrscr(); 

printf("Hello, whats your name? \n"); 
scanf("%s",name); //still dont get why it worked without the "&"// 
printf("nice to meet you %s!!!\n"); 

printf("Whats your age?"); 
scanf("%d",&a); 
    { 
     if((a <= 21) && (a >= 0)) 
     printf("Young!\n"); 

     else if((a <= 100) && (a >= 22)) 
     printf("old!\n"); 

     else 
     printf("that's not an age!\n"); 
    } 

printf("whats your favorite color? \n"); //this is where the program stops// 
scanf("%c",&c); 
    switch(c){ 
    case 'r':printf("Fiery!");break; 
    case 'o':printf("oranggerrr!!");break; 
    // . 
    //. //basically applied the whole rainbow and put some reactions// 
    //. 
    } 

getchar(); 
return 0; 
} 

好吧,所以當我執行它時,我得到了一個分段錯誤,因爲這條線:

printf ("nice to meet you %s!!!\n"); 

printf ("nice to meet you %s!!!\n", name); 

然後一切都工作正常。

現在您的疑問:

  • scanf ("%s", name); 做是因爲名字是一個字符數組,數組的名字就是數組在等於第一個元素的地址。檢查this評論。此外,你可以看到這個問題。

改進:

  • 變化scanf ("%c", &c);scanf (" %c", &c);

注:我不能準確地再現您的問題,因爲我不具備的Turbo C.另外,也許你的程序崩潰是因爲tolower。請注意,tolower返回已更改的字符,因此您必須執行以下操作:c = tolower (c);