多字符字符常量[-Wmultichar] C中的错误

时间:2014-07-08 13:57:16

标签: c gcc compiler-construction character

#include <stdio.h>
main ()
{
    int c;
    while ((c = getchar()) != EOF ) {
        if (c == '\t') {
            while ((c = getchar()) == '\t');
                putchar ('\\t');
        }
        else (c == '\b') {
            while ((c = getchar()) == '\b');
                putchar ("\\b");
        }
        else (c == '\\' ) {
            while ((c = getchar()) == '\\');
                putchar ("\\");
        }
        putchar(c);
    }
}

尝试编译时出现以下错误:

  

cpytbb.c:在函数'main'中:
  cpytbb.c:8:14:警告:多字符常量[-Wmultichar]
  cpytbb.c:10:20:错误:预期';'在'{'标记

之前

请注意,第二个错误可能与问题无关。我是新手,我很可能在我的代码中犯了一些错误。

如果需要,我正在使用gcc。

编辑:我正在尝试'打印'\ t \ t \ b和\作为简单文字。例如,如果我点击'退格',它将打印\ b

2 个答案:

答案 0 :(得分:0)

您的代码存在一些问题。

首先,您应该使用puts,而不是putchar - putchar用于打印单个字符,而您似乎要打印多个字符。

其次,问题在于行putchar ('\\t')。那些应该是双引号,而不是单引号。其他putchar语句是正确的(就报价而言)。

第三,假设您希望代码打印出转义序列(即制表符会导致反斜杠和t打印),putchar ("\\")中的字符串应为"\\\\"。根据经验,要打印N反斜杠,您的字符串中需要2N反斜杠。

但是,如果您想要实际打印原始字符(即标签字符输入导致打印制表符),则需要保留putchar调用,但要删除双反斜杠并用单引号替换双引号。

最后,您的缩进建议putchar调用应位于while循环内,但在每个while语句的末尾都有分号。这意味着putchar调用while循环的一部分。如果不是这样,请删除那些分号。

或许编辑你的帖子,澄清你想要完成的内容将是有益的。

答案 1 :(得分:0)

几个问题:

  1. 使用putchar()尝试打印多个字符。反斜杠是一个字符,因此是bt

  2. 在调用putchar()时使用不同的引号。单引号用于单个字符(转义序列如\b扩展为单个字符,因此可以,而\\b是反斜杠的转义序列,后跟另一个字符),双引号用于字符串(即由零值字符(\0)结尾的一系列零个或多个字符。

  3. 即使你修复了这些,你的程序也会出错,因为你的while循环之后你有一个分号。这意味着你有一个空循环(每次循环只执行一个“空语句”),然后在循环之后它只调用putchar一次。

  4. 两个else块,有条件。 else不能有条件。您可能希望改为编写else if( ... )