Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;编程语法和函数辅助? P>当然,C++编程语言的语法仍然是新的,并且遇到了一些在示例中显示出来的东西,但在某种程度上,它不能完全解释某人完全理解它的含义。p>_C++ - Fatal编程技术网

C++;编程语法和函数辅助? P>当然,C++编程语言的语法仍然是新的,并且遇到了一些在示例中显示出来的东西,但在某种程度上,它不能完全解释某人完全理解它的含义。p>

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 x=0;零部分的作用是什么,将其设置为零还是保留一个假值?在下面的代码中特别说明。 还有一些关于:if(!(cin>>input))input=0如果(!(cin>>0)?如果它不是零的话?似乎零持有一些其他值

还有cin.clear()和cin.ignore当然我听说它会清除下一行或删除某些内容,但是彻底解释一下这会有什么帮助? 如果这仅仅是部分有洞的话,就不能真正转移到更大的事情上。 另外两件事是endl函数和cin.get(),它们也做什么

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 name
distance
在使用代码时很可能与name
distance
发生冲突


主< <代码>的最小声明。主< /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;