2

这似乎是一个重复的问题,但实际上它完全不同,因为其他问题并不能完全回答我的问题。我的问题是,为什么 c++ 编译器不输出下一行的文本,但是当我输入无限空格时它会输出在两个文本之间直到下一行。就像我这样写:

 #include<iostream>
    using namespace std;
    main()
    {
      cout<<"hi
i am the king";//i have not included spaces after "hi"
}

它显示错误:缺少终止字符。好吧,我知道我必须在下一行的引号中包含文本,但不应将其视为空格,因为它是newline.

如果我写同样的东西,包括这样的空格:

#include<iostream>
        using namespace std;
        main()
        {
          cout<<"hi
    i am the king";//i have included spaces after "hi" up to the next line
    }

但它没有显示错误,为什么编译器在这里将空格视为空格,而不是第一个代码中的换行符。如果我不让自己清楚,我欢迎详细说明问题的建议。谢谢!

4

2 回答 2

1

因为根据语言规范,这就是 C++ 编译器的工作方式。编译器对空格字符和换行符的处理方式不同,即使它们都是空白字符。

编译器的行为由“翻译阶段”部分的语言规范描述。编译器需要分别处理每一行。\您可以通过在行尾使用来要求它将多行缝合为一条。编译器不会自动缝合线,除非您明确要求它这样做。

目前尚不清楚“我在“hi”之后到下一行包含空格是什么意思。如果您包含的所有内容都是空格,那么您就没有“下一行”。要开始一个新行,您必须包含一个换行符。

于 2013-06-24T17:31:00.400 回答
0

作为良好的 c++ 编程习惯,我从不将我的一行代码增加到 100 多个字符,这是很好的缩进,所以如果您担心编写大行代码,那么您应该使用以下方法将代码分成小行,

#include<iostream>
using namespace std;
main()
{
      cout<<"hi                     \
      i am the king";//i have included spaces after "hi" up to the next line
}

现在来解决你的问题,

1)所有 c++ 编译器都期望;作为结束字符之后。您正在给出换行符但没有给出;所以你得到编译器错误。

2)正如你所说,经过大量空格直到结束字符你没有得到那个错误,

这是关于堆栈溢出的一场精彩辩论

你还在限制代码中的行长吗?

这表明每一行都在某个时候结束说 x(这个值取决于你使用的编译器)。当您编写代码直到行尾时,编译器找不到任何换行符,因此对于第二点,您不会发现任何错误。

于 2013-06-24T06:30:01.013 回答