while(cin.getline()) 怎么停止循环
时间: 2023-10-22 19:13:21 浏览: 69
在使用 `cin.getline()` 时,可以通过输入特定的字符来停止循环,常见的方法是在输入完最后一行后,按下 `ctrl + d`(在 Windows 系统上是 `ctrl + z`),这样会产生一个 EOF(End of File)信号,使程序停止循环。 例如:
```c++
while(cin.getline(input, MAX_SIZE)) {
// 处理输入的内容
}
```
在输入完最后一行后,按下 `ctrl + d` 即可停止循环。
相关问题
while (cin.getline(s, 80)) { if (s == "end") break; out << s << endl; } 当s=="end"时,循环未结束
在这段代码中,当输入的字符串等于"end"时,循环确实不会立即结束。这是因为在比较字符串时,使用的是 C++ 中的字符串比较运算符"==",它只能比较两个字符串的地址是否相同,而不能比较它们的内容是否相同。
为了比较字符串的内容是否相同,可以使用 C++ 中的字符串比较函数`strcmp()`,或者使用 C++11 引入的字符串比较函数`std::string::compare()`。
修改后的代码如下:
```
while (cin.getline(s, 80)) {
if (strcmp(s, "end") == 0) break;
out << s << endl;
}
```
或者:
```
while (cin.getline(s, 80)) {
if (string(s).compare("end") == 0) break;
out << s << endl;
}
```
这样,当输入的字符串为"end"时,循环就会立即结束。
#include <string.h> #include <iostream> using namespace std; int frequency(char * substr, char * str); int main() { char sub[128],str[1024]; cin.getline(sub,128); // 输入子串 cin.getline(str,1024); // 输入长串 int n = frequency(sub,str); // 调用frequency函数,计算子串在长串中出现的次数 cout<<n<<endl; // 输出次数 return 0; } // 函数frequency:计算子串在长串中出现的次数 // 参数:substr-指向子串,str-指向长串 // 返回值:出现的次数 int frequency(char * substr, char * str) { // 请在此添加代码,实现函数frequency /********** Begin *********/ int a=strlen(str),b=strlen(substr); int n=0, i=0; while (i<=a-b) { bool flag=true; for (int j=0; j<b;j++) { if (str[i+j]!=substr[j]) { flag=false; } if(flag) { i+=b; n++; } else { i++; } } return n; } /********** End **********/这段代码怎么修改
这段代码有几个问题,需要进行修改:
1. 在函数frequency中,for循环的结束位置不正确,应该将return n;放在for循环外面,否则会造成函数无法正常返回。
2. 在for循环中,当flag为false时,i的值只增加了1,应该改为i+=1,否则会导致程序陷入死循环。
下面是修改后的代码:
```
#include <string.h>
#include <iostream>
using namespace std;
int frequency(char * substr, char * str);
int main() {
char sub[128],str[1024];
cin.getline(sub,128); // 输入子串
cin.getline(str,1024); // 输入长串
int n = frequency(sub,str); // 调用frequency函数,计算子串在长串中出现的次数
cout<<n<<endl; // 输出次数
return 0;
}
// 函数frequency:计算子串在长串中出现的次数
// 参数:substr-指向子串,str-指向长串
// 返回值:出现的次数
int frequency(char * substr, char * str) {
int a=strlen(str),b=strlen(substr);
int n=0, i=0;
while (i<=a-b) {
bool flag=true;
for (int j=0; j<b;j++) {
if (str[i+j]!=substr[j]) {
flag=false;
}
}
if(flag) {
i+=b;
n++;
}
else {
i+=1;
}
}
return n;
}
```