在C中使用字符常量

时间:2014-03-25 16:58:02

标签: c

我正在尝试编写一个程序,而且我在为变量分配某个单词时遇到了一些麻烦。给我带来问题的部分是这段简单的代码:

char x;
if (friction > fN || friction < -fN) {
    x = 'false';
    printf("\%s\n", x);
}
else {
    x = 'true';
    printf("\n%s\n", x);
}

fprintf(Output,"%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf, %s\n", theta, theta_rad, V, Fa, Uc, Vc, moment, fN, friction, x);

基本上我只想输出x&#34;值&#34;是,并将其包含在我的文件中。

我收到以下两条警告,全部与第x = 'false'行和x = 'true'行有关,以及我如何宣布char x

warning: character constant too long for its type
warning: overflow in implicit constant conversion
warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘int’

注意:fprintf中的其余参数打印正常,问题仅在于我如何声明char。最后,它不打印x&#39;值&#39;在所有......

提前感谢您,我感谢您的帮助!

5 个答案:

答案 0 :(得分:2)

char只存储一个字符。您需要声明一个字符数组(通常称为字符串)并使用string.h函数(即strcpy)来复制和存储字符串。

另请注意,字符串用双引号括起来,而不是单引号。

#include <string.h>与您的标题放在一起:

char x[255];
if (friction > fN || friction < -fN) {
    strcpy(x, "false");
    printf("\%s\n", x);
}
else {
    strcpy(x, "true");
    printf("\n%s\n", x);
}

fprintf(Output,"%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf, %s\n", theta, theta_rad, V, Fa, Uc, Vc, moment, fN, friction, x);

当然,如果您以后没有使用"true"变量,可能只想直接打印"false"x字符串。

答案 1 :(得分:2)

您的代码存在的问题是您将x声明为charchar是一种只能存储1个字符的类型。因此,如果要存储多个字符,则需要使用所谓的string。字符串可以声明为char矢量。例如,char str[20]声明一个包含20个字符的字符串。但是,在您的情况下,最好使用(请注意从编译器获得的第三个警告)指向常量char的指针,使用char * str =“string content”定义。请注意使用双引号(")而不是单引号(')。它们之间的区别在于单引号用于初始化char,示例char c='a'。声明字符串时,必须使用双引号,例如char *str="hello world!"char str[]="hello world!"。当您使用双引号声明一个字符串时,会在字符串的末尾添加一个特殊字符,称为字符串终结符('\0',请注意这是一个单个字符,因此您使用它周围的单引号)。 以下是您的代码示例:

char* x; // x is declared as a constant string
if (friction > fN || friction < -fN) {
    x = "false";
    printf("\%s\n", x);
}
else {
    x = "true";
    printf("\n%s\n", x);
}

答案 2 :(得分:1)

字符仅适用于单个字符。您需要为多个字符使用字符串。

char * x = "false"; /*double quotes*/
printf("%s\n", x);

也就是说,如果只想表示真假,那么分别使用整数10会更好,因为这样你可以将它们传递给if语句和其他条件。

答案 3 :(得分:1)

正如其他用户指出的那样,char只能存储一个字符(如名称所示)。您尝试执行的操作的替代代码是:

    if (friction > fN || friction < -fN) {
        printf("false\n");
        }
    else {
        printf("true\n");
        }

答案 4 :(得分:0)

char类型用于存储单个字符,但您尝试定义具有多个字符的常量。如果您需要一系列字符,请使用引号(")和const char*