>n)終止問題" type="hidden"/>

while(scanf("%d",&n)!=EOF) / while(cin>>n)終止問題


問題的發現:(想要看干貨可以直接跳過這段)

我最近剛了解到關於棧的用法,於是按照參考書尋找代碼,並把它敲到電腦上。編譯運行代碼后發現無法終止,在網上查找各種資料,總結如下。

 

因為我的電腦是Windows和Mac雙系統的所以都試了一遍。

Windows端:

在(Visual Studio 2019/Dev c++/CodeBlocks)上編譯運行后可以用ctrl+z終止並可以顯示出最后結果;編譯后的exe文件按住ctrl+z后程序會直接退出,連顯示都沒有。

以下是在編譯器下運行的結果:

在clion上編譯運行按ctrl+z沒有用,編譯后的exe程序也是會直接退出。

解決辦法:

前三種在編譯器里都可以運行,在編譯后的exe文件如果要想使用可以在程序里(主函數里int main() )加入system("pause");

#include <stdio.h>
int main()
{
    你要寫的代碼
    while(scanf("%d",&n)!=EOF)
    {
        .....
    }
    system("pause"); //這一步至關重要
}

效果如下:

 

CLion的情況就比較麻煩,但也有解決辦法

如果你編的是C語言:(規避CLion的bug)

#include <stdio.h>
int main()
{
    你的代碼...
    while(scanf("%d",&n)!=EOF)
    {
        .....
        if (getchar() == '\n')     //這一步至關重要
        {
            break;
        }
    }
    return 0;
}

如果編譯完效果如下:

但是編譯完的exe文件,運行后還是會直接退出這時就應該在程序里(主函數里int main() )加入system("pause");

#include <stdio.h>
int main()
{
    你的代碼...
    while(scanf("%d",&n)!=EOF)
    {
        .....
        if (getchar() == '\n')
        {
            break;
        }
    }
    system("pause");       //這一步至關重要
    return 0;
}

編譯后效果如下:

 

 

如果你編的是C++語言:(規避CLion的bug)

#include <bits/stdc++.h>
using namespace std;
int main()
{
    你的代碼...
    while(cin>>n)
    {
        .....
        if (cin.get() == '\n')  //這一步至關重要
        {
            break;
        }
    }
    return 0;
}

cin是終端輸入,也被稱之為標准輸入(standard input),cin的主要功能就是從標准輸入讀入一個值。當從鍵盤上輸入一串字符並按回車后,這些字符會首先被送到輸入緩沖區中存儲。每當按下回車鍵后,cin.get()就會檢測緩沖區中是否有了可讀的數據。

效果如下:

同樣編譯完的exe文件,運行后還是會直接退出這時就應該在程序里(主函數里int main() )加入system("pause");

#include <bits/stdc++.h>
using namespace std;
int main()
{
    你的代碼...
    while(cin>>n)
    {
        .....
        if (cin.get() == '\n')
        {
            break;
        }
    }
    system("pause");   //這一步至關重要 
    return 0;
}

效果和C同樣就不展示了。

 

Mac端:

Xcode:無論是在Xcode編譯運行,還是在它編譯后的文件上運行按住ctrl+d都可以運行。

效果如下:

 

CLion:在程序上按ctrl+d進程會直接結束,但是在它編譯后的程序運行會顯示正確結果

效果如下:

 

解決辦法:

Xcode在Mac上的表現接近完美。

CLion可以在參考Windows上的解決辦法,在while里插入if語句;或者直接在調試(Debug)里運行。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM