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

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

#include "stdafx.h"

using namespace System;

int main(array<System::String ^> ^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<System::String ^> ^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;
}
时间: 2024-10-25 21:06:16

C++/CLI——使用嵌套 if 语句的 CLR 程序的相关文章

SQL嵌套SELECT语句的用法-

SQL嵌套SELECT语句是很常见的SQL语句,下面就为您详细介绍SQL嵌套SELECT语句的语法,并附相关示例,供您参考学习之用. 嵌套SELECT语句也叫子查询,一个SELECT 语句的查询结果能够作为另一个语句的输入值.子查询不但能够出现在Where子句中,也能够出现在from子句中,作为一个临时表使用,也能够出现在select list中,作为一个字段值来返回. 1.单行子查询 :单行子查询是指子查询的返回结果只有一行数据.当主查询语句的条件语句中引用子查询结果时可用单行比较符号(=,

嵌套SQL语句訪问DB2中SQLCA的调用技巧

在IBM的关系型数据库产品DB2中,使用SQL Communication Area(SQLCA)将程序中嵌套的SQL语句执行情况返回给程序. 在程序中有针对性地对SQLCA实施调用,可对程序中各类SQL语句的执行结果实施控制,从而避免程序的意外终止.同一时候,也能够提高执行效率,减小系统开销和处理时间.本文将对此作一简要介绍. SQLCA的结构 SQLCA的结构定义例如以下: struc sqlca {        unsigned char     sqlcaid[8]; long    

sql子查询 嵌套SELECT语句

嵌套SELECT语句也叫子查询,一个 SELECT 语句的查询结果能够作为另一个语句的输入值.子查询不但能够出现在Where子句中,也能够出现在from子句中,作为一个临时表使用,也能够出现在select list中,作为一个字段值来返回. 1.单行子查询 :单行子查询是指子查询的返回结果只有一行数据.当主查询语句的条件语句中引用子查询结果时可用单行比较符号(=, >, <, >=, <=, <>)来进行比较. 例:select ename,deptno,salfrom

嵌套SQL语句访问DB2中SQLCA的调用技巧

在IBM的关系型数据库产品DB2中,使用SQL Communication Area(SQLCA)将程序中嵌套的SQL语句运行情况返回给程序.在程序中有针对性地对SQLCA实施调用,可对程序中各类SQL语句的执行结果实施控制,从而避免程序的意外终止.同时,也可以提高运行效率,减小系统开销和处理时间.本文将对此作一简要介绍. SQLCA的结构 SQLCA的结构定义如下: struc sqlca {        unsigned char     sqlcaid[8]; long        

嵌套if-esle语句

C语言自学之嵌套if-esle语句 Dome : 获奖条件为年销售业绩100万以上,并且入职满两年的员工.小明进入公司1年,销售业绩为120万. 在代码编辑器中使用嵌套if-else语句判断小明是否有资格获得优秀员工奖, 运行结果为: 很遗憾,期望你再接再厉 #include <stdio.h> int main() { int sale=120; //销售业绩为120万 int year=1; //刚刚进入公司1年 if(sale>100) { if(year>=2) { pri

MySQL嵌套查询语句

MySQL嵌套查询语句统计每个省的人口最多的与最少的城市 SELECT District,NAME,Population FROM city WHERE Population IN (SELECT MIN(Population) FROM city WHERE city.CountryCode='CHN' GROUP BY city.District) UNION SELECT District,NAME,Population FROM city WHERE Population IN (SEL

第4章 将语句编织成程序

第4章 将语句编织成程序 4.1 用运算符对数据进行运算 4.1.1 用表达式表达设计意图 4.1.2 算术运算符 4.1.3 赋值操作符 4.1.4 关系运算符 4.1.5 逻辑运算符 4.1.6 运算符之间的优先顺序 4.1.7 将表达式组织成语句 4.2 条件选择语句 4.2.1 if语句 4.2.2 并列选择的switch语句 4.3 循环控制语句 4.3.1 while循环 4.3.2 do…while循环 4.3.3 for循环 4.3.4 循环控制:break和continue 4

VBA嵌套if语句

一个If或ElseIf语句可以嵌套在另一个If或ElseIf语句中.内部的If语句是根据最外层的If语句执行的.这使得VBScript能够轻松处理复杂的条件. 语法 以下是VBScript中嵌套的If语句的语法. If(boolean_expression) Then Statement 1 ..... ..... Statement n If(boolean_expression) Then Statement 1 ..... ..... Statement n ElseIf (boolean

Asp.Net Core-几行代码解决Razor中的嵌套if语句

MVC开发中,经常会遇到在razor中插入简单的逻辑判断. @if (clientManager.IsAdmin) { if (!Model.Topic.Top) { <a asp-action="Top" asp-controller="Topic" asp-route-id="@Model.Topic.ID" class="btn btn-default btn-xs" title="置顶">