即使在换行后,“文件末尾也没有新行”警告

时间:2011-07-24 21:16:51

标签: c++ cygwin warnings newline

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

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

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

   #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)

如果不是换行符,请知道什么可能导致警告?

6 个答案:

答案 0 :(得分:2)

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

您使用哪种编辑器/ IDE?

答案 1 :(得分:2)

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

答案 2 :(得分:2)

  

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

     

该文件不需要以空行结尾(这将表示为两个换行符   连续的字符),只是一个正确终止的字符。

     

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

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

答案 3 :(得分:1)

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

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

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

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

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

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

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

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

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