关于c ++:“文件末尾没有换行符”警告,即使在换行后也是如此

“No newline at end of file” warning, even after putting in a newline

我最近一直在努力学习C ++,直到今天一直都很顺利。 我正在尝试创建一个非常简单的应用程序,它基本上只是要求用户输入一个数字,然后显示该数字的阶乘。

当我尝试在Cygwin中编译文件(g ++ factorial.cpp -o fact)时,我收到以下警告"警告:文件末尾没有换行符"。 按照警告的说法,我在文件的末尾添加了一个换行符并再次尝试...结果完全相同。 无论我尝试一个新行还是二十行,它似乎永远不会编译。

我在下面添加了简单但仍未完成的文件(除非想象它的末尾有一个空白行。这个noob无法在代码视图中显示它):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
   #include <iostream>
   #include <string>

    using namespace std;

    int getInput();
    void displayFactorial(int);

    int main()
    {
        int number = getInput();
        displayFactorial(number);
        return 0;

    }



    int getInput()
    {

        int userNumber;
        bool okNumber;

        while(okNumber == false){
            cout <<"Please eneter a number in the range of 1-10";
            cin >> userNumber;
            if(userNumber >= 1 and userNumber <=10){
                okNumber = true;
            }
            else{
                cout <<"Incorrect number" << endl;
            }
        }
        return userNumber;
    }

        void displayFactorial(int number){
            string displayString = number +"! =";
            int total;

            for(int i = 0; i<=number; i++){
                //displayString +="
            }

            cout << displayString;

        }

// File ended the line above this (with a new line. This line added by Martin so it shows)

如果它不是换行符,任何想法可能导致该警告?


Most Unix-based text editors will add a trailing newline automatically, but apparently
Notepad++ (which I've never used) doesn't.

The file doesn't need to end with a blank line (which would be represented as two newline
characters in a row), just a properly terminated one.

See if Notepad++ has a configuration option that tells it to automatically append a newline
when saving a file, or at least to ask whether you want to add one.

很好的解释 - 我有同样的问题,只需使用写字板而不是记事本解决它:)


您所要做的就是等待新的C ++ 0x标准。源文件末尾不再需要换行符。 (这花了40年?)


首先,警告不会阻止程序编译。
第二:你确定要编译你正在编辑的文件吗?
我在我的大学里做了一些教程,大多数初学者犯了这个错误。
如果你可以肯定地说你正在编译你正在编辑的文件,那么它可能是由不同的新行设置引起的,但我认为这非常不可能。

你使用哪个编辑器/ IDE?


这个问题与你的C ++代码无关;我几乎可以保证你的程序中未初始化的布尔值不会导致问题。这是源文件本身的问题。"Hello,world"程序会产生相同的警告。

包含C ++源文件的文本文件由字符行组成,其中每行由行尾标记终止。在Unix中,因此在Cygwin中(使用默认设置),行尾标记是单个'
'
(换行符,换行符)字符。 (Windows使用CR-LF对("

")。

文本文件的最后一行可能不以换行符结尾,但g ++更喜欢正确终止它。

大多数基于Unix的文本编辑器会自动添加一个尾随换行符,但显然Notepad ++(我从未使用过)不会。

该文件不需要以空行结束(它将在一行中表示为两个换行符),只是一个正确终止的行。

查看Notepad ++是否有一个配置选项,告诉它在保存文件时自动附加换行符,或者至少询问是否要添加换行符。

(文件末尾缺少的换行符可能是您在发布问题时粘贴代码时出现问题的原因。)


结果是没有将布尔变量初始化为false是问题。但是,我不确定它是否实际上是问题的初始化,或者只是文本编辑器可能实际上没有保存文件的事实,如果你只是在它的末尾添加空格。对于那些想知道的人,这在Notepad ++中发生在我身上。


也许这是一些看不见的角色的问题?我复制粘贴您的代码并在没有任何警告/错误的情况下编译,在Cygwin下使用以下g ++:

1
2
$ g++ --version
g++ (GCC) 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)