2014-04-20 25 views
0

的代碼,如何在C中使用char數據類型?

#include <stdio.h> 
#include <string.h> 
main() 
{ 
    int a, b, s; 
    char ch; 
LOOP: 
    printf("enter digits \t"); 
    scanf("%d %d", &a, &b); 
    s = a + b; 
    printf("\n answer is %d", s); 

    printf("\n add another no.? (yes/no) : \t"); 
    scanf("%c", &ch); 
    if (ch == "yes") 
     goto LOOP; 
    if (ch == "no") 
     printf("\n Okay bye !!! "); 
    exit(0); 
    return 0; 
} 

誰能告訴這是爲什麼不工作?當它問:

Add another no.? 

我不能輸入任何東西,我鍵入,但沒有打印。

Thx in advanced。

+0

你應該學會使用並while循環,而不是「轉到LOOP」。 –

+0

您無法將c字符串與==比較,請使用strcmp(s1,s2)。 – Leeor

+0

我知道goto不好。 – user3551432

回答

2

首先,如果你想存儲「是」,你將需要一個字符數組,而不是一個字符。

那麼你可以不使用字符串文字像這樣比較字符數組:ch == "yes",你必須使用「字符串比較」,strcmpstrncmp

0

「yes」是char *(或指向char的指針),它不能使用==進行比較。在這種情況下,您需要使用比較兩個字符串的庫函數strncmp()。另外,char是一種數據類型,通常保存一個字節的信息,在這種情況下,單個字符不能包含3個字符的字符串「yes」。在使用scanf填充& ch時,由於char的大小,ch將最終只包含輸入的第一個字符。

0

你的代碼表示輸入1表示yes,0表示no,而你正在檢查ch ==「yes」和ch ==「no」。

可以初始化一個整數,說,int choice;然後:

printf("\n add another no.? 1 for yes/0 for no : \t"); 
    scanf("%i", &choice); 
    if (choice == 1) 
     goto LOOP; 
    if (choice == 0){ 
     printf("\n Okay bye !!! "); 
    exit(0); 
    } 

需要注意的是出口(0)應該是如果()語句中,即{大括號}。當我們不在if()語句中使用{大括號}時,只有if()後面的第一段代碼,即printf();在這種情況下與if()一起被使用。其次,如果你想使用yes和no來代替1和0,那麼在這種情況下,你不能將一個字符串與==運算符進行比較。要比較兩個字符串,請使用strcmp函數,如果字符串相同,則返回0;如果不相同,則返回一些正值或負值。 (這就是爲什麼我們必須使用!運算符與strcmp,以便在字符串相同的情況下,並且strcmp返回0,!0變爲1,這意味着true和if語句被執行)。作爲char ch[5];然後:

printf("\n add another no.? yes for yes/no for no : \t"); 
    scanf("%s", ch); 
    if (!strcmp(ch,"yes")) 
     goto LOOP; 
    if (!strcmp(ch,"no")){ 
     printf("\n Okay bye !!! "); 
    exit(0); 
    } 
相關問題