在C++中,while
语句通常用于在满足某个条件时执行循环。while (true)
表示一个无限循环,直到在循环体内通过某种方式退出(如 break
或 return
语句)。
while(true)的写法
#include <cstdio>
#include <iostream>
using namespace std;
int main()
{
while(true)//while的特殊用法
{
int n;
cin >> n;
if(n == 0) break;
for(int i = 1; i <= n ;i++)
{
cout<<i<<" ";
}
cout<<endl;
}
}
这里的例子展示了一些常见的 while
特殊用法,尤其是在与 cin
(标准输入流)结合时,用于处理输入操作。
while (cin >> n)的写法
这个表达式的意思是:
1. 使用 cin
读取一个输入值并存储到变量 n
中。
2. 如果 cin
读取成功(即输入的内容有效且能够被解析为 n
的类型),则 cin >> n
会返回 true
。
3. 当遇到文件结束符(通常是 Ctrl+D
或 Ctrl+Z
)或输入格式不正确时,cin >> n
会返回 false
,循环结束。
因此,while (cin >> n)
会在每次成功读取输入时继续执行循环,一旦遇到无效输入或结束符,循环结束。
#include <cstdio>
#include <iostream>
using namespace std;
int main()
{
int n;
while(cin >> n)//cin本身有返回值,如果读取错误或是读取完毕则会跳出循环
{
if(n == 0) break;//补全条件,读到0就跳出循环
for(int i = 1; i <= n;i++) cout<<i<<" ";
cout<<endl;
}
return 0;
}
while (cin >> n && n)的写法
这个表达式更进一步:
1. 首先执行 cin >> n
,尝试从标准输入流中读取值并存储到 n
中。
2. 如果 cin >> n
成功(即读取到了值),则接下来会判断 n
是否为非零。如果 n
为零,条件不成立,循环结束。
3. 这样可以同时检查读取输入的成功与 n
的值是否为非零,实现只有输入了非零值时才继续循环。
#include <cstdio>
#include <iostream>
using namespace std;
int main()
{
int n;
while(cin >> n&&n)
{
for(int i = 1; i <= n;i++) cout<<i<<" ";
cout<<endl;
}
return 0;
}
总结
while (true)
是一个无限循环,通常与break
配合使用以手动退出循环。while (cin >> n)
循环读取输入,直到无法读取(如文件结束符或输入错误)。while (cin >> n && n)
在循环读取输入的同时,还检查输入值是否为非零,这种模式常用于处理整数输入的特殊情况。
while (cin >> n,n)的写法
cin >> n, n
这种形式使用了逗号运算符,它具有一些独特的语法行为。
逗号运算符的原理
在 C++ 中,逗号运算符(,
)用于依次计算多个表达式,并且只返回最后一个表达式的值。即:
a, b;
a
表达式会首先被计算。- 然后
b
表达式被计算。 - 最终结果是
b
的值。
示例
#include <cstdio>
#include <iostream>
using namespace std;
int main()
{
int n;
while(cin >> n,n)
{
for(int i = 1; i <= n;i++) cout<<i<<" ";
cout<<endl;
}
return 0;
}
具体行为如下:
- cin >> n
会尝试读取输入。
- 如果输入成功,表达式会继续检查 n
的值。
- 如果 n
是非零,循环继续;如果 n
是零,循环结束。
总结
- 逗号运算符先计算
cin >> n
(即从输入中读取),然后返回n
的值作为整个表达式的结果。 - 这种写法将输入和条件判断结合起来,是简洁的输入处理方式,可以用于处理输入并判断是否为特定的数值(例如非零)。
scanf的写法
#include <cstdio>
#include <iostream>
using namespace std;
int main()
{
int n;
while(scanf("%d",&n) != -1)//读到-1视为结束
while(~scanf("%d",&n))//与上面等价
{
if(n == 0) break;
for(int i = 1; i <= n;i++) cout<<i<<" ";
cout<<endl;
}
return 0;
}