C++;while(cin>;>;x){}与while(true){cin>;>;x;} 请考虑此C++代码用于创建和遍历链表(由用户决定,而不是程序员决定的节点数)< /P>

C++;while(cin>;>;x){}与while(true){cin>;>;x;} 请考虑此C++代码用于创建和遍历链表(由用户决定,而不是程序员决定的节点数)< /P>,c++,C++,然后,当用户试图终止时,循环将继续自动创建新节点!!为什么? 提前感谢它继续运行,因为循环条件为true,使其成为无限循环。如果您想打破无限循环,可以使用break语句,例如 while (true) { if (!(cin >> n)) { break; // exits the loop } p = new Node(n,q); q = p; } 它继续运行,因为循环条件为true,使其成为无限循环。如果您想打破无限循环,可以使用

然后,当用户试图终止时,循环将继续自动创建新节点!!为什么?
提前感谢

它继续运行,因为循环条件为
true
,使其成为无限循环。如果您想打破无限循环,可以使用
break
语句,例如

while (true) {
    if (!(cin >> n)) {
        break; // exits the loop
    }
    p = new Node(n,q);
    q = p;
}

它继续运行,因为循环条件为
true
,使其成为无限循环。如果您想打破无限循环,可以使用
break
语句,例如

while (true) {
    if (!(cin >> n)) {
        break; // exits the loop
    }
    p = new Node(n,q);
    q = p;
}

Ctrl+D表示EOF,这可能会导致>>操作返回false,因为用户已发出stdin结束的信号。

Ctrl+D表示EOF,这可能会导致>>操作返回false,因为用户已发出stdin结束的信号。

可能存在一种误解,即代码
cin>>n
在到达文件结尾时会自动导致循环中断。事实上,我们要么隐式检查文件结尾,如原始示例或@MrFooz'解决方案所示,要么显式检查,如下图所示:

while(true) { 
    cin >> n;
    if (cin.eof()) break; // We're explicitly checking for EOF here
    p = new Node(n,q);
    q = p;
}

也许有一种误解,即代码
cin>>n
在到达文件末尾时会以某种方式自动导致循环中断。事实上,我们要么隐式检查文件结尾,如原始示例或@MrFooz'解决方案所示,要么显式检查,如下图所示:

while(true) { 
    cin >> n;
    if (cin.eof()) break; // We're explicitly checking for EOF here
    p = new Node(n,q);
    q = p;
}

它继续下去是因为条件是
真的
。让我们看看我是否明白了这一点:你告诉它永远无条件地做某事,然后你想知道它为什么永远无条件地做某事?谢谢你的回答。Jerry,在这两种情况下,我们都告诉循环无条件地继续,因为我们希望用户能够在运行时控制节点创建的终止。两个程序都在循环中使用cin,并在cin处等待用户输入。那么,为什么这两个程序在尝试终止时的行为会有所不同呢?感谢继续,因为条件是
真的
。让我们看看我是否明白了这一点:你告诉它永远无条件地做某事,然后你想知道它为什么永远无条件地做它?谢谢你的回答。Jerry,在这两种情况下,我们都告诉循环无条件地继续,因为我们希望用户能够在运行时控制节点创建的终止。两个程序都在循环中使用cin,并在cin处等待用户输入。那么,为什么这两个程序在尝试终止时的行为会有所不同呢?感谢“不可能”,它确实结束了stdin。我更不确定>>是否实际返回false。不“可能”,它确实结束了stdin。我更不确定>>是否实际返回false.Perfect。谢谢请具体指导我在哪里了解CIN > n如何作为一个条件而不是C++中的语句工作。CIN是一个STD::ISReRAM:()的全局变量。istream的>>运算符返回istream引用()。该istream引用有一个“逻辑not”操作符,用于测试failbit和badbit().Perfect。谢谢请具体指导我在哪里了解CIN > n如何作为一个条件而不是C++中的语句工作。CIN是一个STD::ISReRAM:()的全局变量。istream的>>运算符返回istream引用()。该istream引用有一个“逻辑not”运算符,用于测试failbit和badbit()。