如何在C中使用char数据类型?

时间:2014-04-20 07:56:50

标签: c string 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。

3 个答案:

答案 0 :(得分:2)

首先,如果你想存储&#34;是&#34;你需要一个char数组,而不是一个char。

然后你不能将char数组与这样的字符串文字进行比较:ch == "yes",你必须使用&#34;字符串比较&#34;,strcmpstrncmp

答案 1 :(得分:0)

&#34;是&#34;是char *(或指向char的指针),无法使用==进行比较。在这种情况下,您需要使用库函数strncmp()来比较两个字符串。 char也是一种数据类型,它通常包含一个字节的信息,在这种情况下,一个char不能包含3个字符串&#34; yes&#34;。在使用scanf填充&am​​p; ch时,由于char的大小,ch最终只包含输入的第一个char。

答案 2 :(得分:0)

你的代码说输入1表示是,0表示否,而你正在检查ch ==&#34;是&#34;和ch ==&#34; no&#34;。

您可以初始化一个整数,例如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);
    }

注意,exit(0)应该在if()语句中,即在{curly bracket}之间。当我们不在if()语句中使用{花括号}时,只有if()之后的第一段代码(在这种情况下为printf();)与if()一起使用。< / p>

其次,如果你想使用yes和no而不是1和0,那么在这种情况下你不能将字符串与==运算符进行比较。要比较两个字符串,请使用strcmp函数,如果字符串相同则返回0,如果不相同则返回一些正值或负值。 (这就是为什么我们必须使用带有strcmp的!运算符,以便在字符串相同的情况下,并且strcmp返回0,!0变为1,这意味着为真,如果执行了语句。)

我们将ch,一个字符串初始化为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);
    }