程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++/CLI——使用嵌套 if 語句的 CLR 程序

C++/CLI——使用嵌套 if 語句的 CLR 程序

編輯:C++入門知識

C++/CLI——使用嵌套 if 語句的 CLR 程序


// 嵌套ifCLR.cpp: 主項目文件。

#include "stdafx.h"

using namespace System;

int main(array ^args)
{
    wchar_t letter;
    Console::WriteLine(L"Enter a letter: ");

    letter = Console::Read();
    if(letter >= 'A')
        if(letter <= 'Z')
        {
            Console::WriteLine(L"You entered a captial letter.");
            return 0;
        }
    if(letter >= 'a')
        if(letter <= 'z')
        {
            Console::WriteLine(L"You entered a small letter.");
            return 0;
        }
    Console::WriteLine(L"You did not enter a letter.");
   
    return 0;
}

按照書上的代碼,運行時窗口一閃就消失了。

可是在編寫C++/CLI控制台應用程序時,發現即使使用了Console::ReadLine(); ,運行時窗口仍然消失了。

 

看到網上有人提出解決辦法,我打算總結一下。

首先解釋一下關於緩沖區的內容。

每個輸入輸出流都維護一個字符緩沖區,用於從流接收輸入,或者用於輸出到流。原程序在執行letter=Console::Read();後出現一個輸入提示符,假如輸入's',然後回車,相當於輸入了's\r\n',而's'被讀到了letter變量裡,這時緩沖區裡的內容會是'\r\n',即殘留了回車鍵值。Console::ReadLine()每次讀取一行,即可以將行尾的回車鍵讀走;Console::Read();每次讀取一字符,需要兩次將'\r\n'讀走,這樣才能清空到緩沖區。

原程序的不妥在於,執行Console::ReadLine()時,緩沖區裡有\r\n,它會將緩沖區裡第一個\r\n及其前面的內容(這裡是空)讀走,不必等待用戶輸入,用戶也就沒機會輸入了。直接就閃了

在此總結一下網友的測試結果(自己已驗證):

如果只在Console::WriteLine (L"You did not enter a letter." );後添加兩個Console::Read();,那麼窗口還是消失;
如果在Console::WriteLine語句後添加三個Console::Read();,那麼窗口可以顯示;
如果在Console::WriteLine語句後添加兩個Console::Read();和一個Console::ReadLine();,那麼窗口也可以顯示;
如果在Console::WriteLine語句後直接添加兩個Console::ReadLine();,那麼窗口也可以顯示;
而在Console::WriteLine語句後添加一個Console::Read();和一個Console::ReadLine();,窗口也消失了。

最後貼出自己修改後的的代碼

 

// 嵌套ifCLR.cpp: 主項目文件。

#include "stdafx.h"

using namespace System;

int main(array ^args)
{
	wchar_t letter;
    Console::WriteLine(L"Enter a letter: ");

	letter = Console::Read();
	if(letter >= 'A')
		if(letter <= 'Z')
		{
			Console::WriteLine(L"You entered a captial letter.");
			Console::ReadLine();
			Console::ReadLine();
			return 0;
		}
	if(letter >= 'a')
		if(letter <= 'z')
		{
			Console::WriteLine(L"You entered a small letter.");
			Console::ReadLine();
			Console::ReadLine();
			return 0;
		}
	Console::WriteLine(L"You did not enter a letter.");
	
	Console::ReadLine();
	Console::ReadLine();
    return 0;
}


 



  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved