C++;编程语法和函数辅助? P>当然,C++编程语言的语法仍然是新的,并且遇到了一些在示例中显示出来的东西,但在某种程度上,它不能完全解释某人完全理解它的含义。p>
例如,如果要创建一个变量,比如:int x=0;零部分的作用是什么,将其设置为零还是保留一个假值?在下面的代码中特别说明。 还有一些关于:if(!(cin>>input))input=0如果(!(cin>>0)?如果它不是零的话?似乎零持有一些其他值 还有cin.clear()和cin.ignore当然我听说它会清除下一行或删除某些内容,但是彻底解释一下这会有什么帮助? 如果这仅仅是部分有洞的话,就不能真正转移到更大的事情上。 另外两件事是endl函数和cin.get(),它们也做什么C++;编程语法和函数辅助? P>当然,C++编程语言的语法仍然是新的,并且遇到了一些在示例中显示出来的东西,但在某种程度上,它不能完全解释某人完全理解它的含义。p>,c++,C++,例如,如果要创建一个变量,比如:int x=0;零部分的作用是什么,将其设置为零还是保留一个假值?在下面的代码中特别说明。 还有一些关于:if(!(cin>>input))input=0如果(!(cin>>0)?如果它不是零的话?似乎零持有一些其他值 还有cin.clear()和cin.ignore当然我听说它会清除下一行或删除某些内容,但是彻底解释一下这会有什么帮助? 如果这仅仅是部分有洞的话,就不能真正转移到更大的事情上。 另外两件事是endl函数和cin.get(),它们也做什么 int
int main()
{
int input = 0;
do
{
cout<<"Enter a number (-1 = QUIT):";
if (!(cin>> input))
{
cout<<"INVALID" <<endl;
cin.clear();
cin.ignore(10000, '\n');
}
if (input != -1)
{
cout<<input<<" was entered"<<endl;
}
}
while (input != -1);
cout<<"Done"<<endl;
cin.get();
return 0;
}
intmain()
{
int输入=0;
做
{
无法输入)
{
cout下面的代码是我写这篇文章时在问题中提供的代码,除了我在顶部添加了必要的标题和使用
指令的:
#include <iostream>
using namespace std;
int main()
{
int input = 0;
do
{
cout<<"Enter a number (-1 = QUIT):";
if (!(cin>> input))
{
cout<<"INVALID" <<endl;
cin.clear();
cin.ignore(10000, '\n');
}
if (input != -1)
{
cout<<input<<" was entered"<<endl;
}
}
while (input != -1);
cout<<"Done"<<endl;
cin.get();
return 0;
}
使std
命名空间中的标识符直接在全局命名空间中可用。这意味着您可以编写,例如,只编写cout
,而不是限定的std::cout
或完全限定的::std::cout
使用namespace
指令适用于小型探索性和个人工具程序,但在较大的代码库中可能更麻烦
无论如何,请记住永远不要将此类指令放在标头的全局命名空间中,因为这是在包含该标头的代码中创建名称冲突的可靠方法。例如,标准库定义了一个名称std::distance
。在没有限定的情况下,使用使用命名空间std;
指令e namedistance
在使用代码时很可能与namedistance
发生冲突
是主< <代码>的最小声明。主< /Cord>函数是C中用户提供的启动函数,而C++中的函数大致相同,除了C++中动态变量的初始化可以在<代码>主< /C> >之前执行。
上面的声明是C++03方式。在C++11中,也可以将其声明为
auto main() -> int
这意味着完全相同,而且有点冗长,但可以合理地表示一般使用此语法的约定,即一致性
main
函数也可以有参数,这些参数表示提供给进程的命令行参数,但此方案仅在基于UTF-8的*nix中工作良好。因为main
参数基于char
,Windows中默认的基于char
的文本编码是这样的,例如,文件名h无法表示国际字符。因此,对于可移植代码使用main
参数通常不是一个好主意
声明类型为int
的名为input
的变量,并将其初始化为0
基本类型的任何零值表示为“代码> false \代码>,当它用作布尔值时,相反,任何非零值表示Trime< /Cord>,这个约定源于早期C,它没有<代码>布尔O/C++ >类型。false
和true
但是,上面的变量不用作布尔值,而是表示用户输入的最后一个数字
这是一个do while
循环。在每次迭代后检查while
后声明的继续条件。这意味着循环体保证至少执行一次
C++还有另外三个循环:while
循环的;for
-loop的普通循环,它收集循环头中的所有循环控制内容;for
的基于范围的,它特别适合于迭代集合中的项
表达式cin>>输入
- 尝试将用户输入的下一个“单词”解释为整数,并将其存储在变量
input
中,以及
- 生成对
cin
的引用作为其表达式结果
如果文本输入失败,或者从文本规范到int
的转换失败,则cin
进入失败状态。在这种状态下,进一步的输入被忽略。幸好这很容易检查,因为当流直接用作If
或while
(包括do while
)条件,然后它将隐式转换为布尔值,就像您编写了!stream.fail()
因此,!(cin>>输入)
执行上述所有操作,并生成!!cin.fail()
(两次否定,“not not”),其中fail
是检查流是否处于故障状态的成员函数
如果流处于失败状态,则必须清除该状态,以免忽略进一步的输入操作,这就是原因
cin.clear();
实现
此外,在输入缓冲区中会留下一些输入文本–至少一个换行符(行尾标记),为了避免该文本在下一次循环中被处理为有效输入,最好将其删除!这就是
cin.ignore(10000, '\n');
完成。假设输入缓冲区中剩下的字符不超过10000个
新手经常会担心endl
的效率低下,而不仅仅是\n
auto main() -> int
int input = 0;
do
{
// Stuff, called the "loop body".
}
while (input != -1);
cout<<"Enter a number (-1 = QUIT):";
if (!(cin>> input))
{
cout<<"INVALID" <<endl;
cin.clear();
cin.ignore(10000, '\n');
}
cout<<"Enter a number (-1 = QUIT):" << flush;
cin.clear();
cin.ignore(10000, '\n');
cout<<"INVALID" <<endl;
cout<<"INVALID\n" << flush;
cout<<"Done"<<endl;
cin.get();
return 0;