C++输入数据流用回车符判断终止

实际问题:很多读入数据都希望用回车来结束,比如输入一串double(输入时用空格隔开),存入到一个vector或数组中,最后用回车结束(关键是个数不限,所以不能用固定循环次数来限定它。
         咋一看很简单,要编程突然还没头脑~~~关键是字符和整数或浮点数据的区别。
        用cin.get()来获取流中的字符,然后判读是否为回车符,如果不是则将字符放回流中(unget),

#include "stdafx.h"
#include
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    char c;
    double d;
    while((c=cin.get())!='\n')
    {
        cin.unget();
        cin>>d;
    }
    cout<
    while((c=cin.get())!='\n')
    {
        cin.unget();
        cin>>d;
    }
    cout<
    cin>>d;
    return 0;
}

### C++ 中实现连续输入直到按下回车结束的方法 在 C++ 编程中,可以通过多种方式实现连续输入数据并以按回车键作为结束条件的功能。以下是几种常见的实现方法及其特点: #### 方法一:使用 `std::vector` 和 `while` 循环 通过读取整数或其他基本类型的数值,并利用标准库中的容器类(如 `std::vector`),可以动态存储用户输入的数据。当检测到换行符 `\n` 时退出循环。 ```cpp #include <iostream> #include <vector> using namespace std; void test01() { vector<int> arr; int n = 0; while (cin >> n) { // 使用流提取操作符读取输入 arr.push_back(n); if (cin.get() == '\n') { // 如果下一个字符是换行符,则退出 break; } } // 输出第一个元素验证功能 cout << arr[0] << endl; } int main() { test01(); return 0; } ``` 这种方法适用于处理单个类型的一系列输入值[^1]。 --- #### 方法二:逐字节读取字符串 如果目标是从键盘接收多组字符串而非单一类型的变量集合,可采用逐字节的方式捕获用户的每一次按键行为。此技术允许更灵活地管理复杂形式的输入序列。 ```cpp #include <iostream> using namespace std; int main(){ char Aword[10][10]; int i = 0; cout << "Enter a word: "; cin >> Aword[0]; // 初始化第一次输入 cin.get(); // 清除缓冲区剩余的新行字符 while(++i){ cout << "Enter a word: "; int j = 0; cin.get(Aword[i][j]); for(;Aword[i][j]!='\n';j++) cin.get(Aword[i][j+1]); if(j==0){ // 若未接收到有效字符则终止循环 break; } Aword[i][j]='\0'; } for(int k=0;k<i;k++){ cout<<Aword[k]<<endl; } system("pause"); return 0; } ``` 上述代码片段展示了如何手动构建二维字符数组来保存每条独立记录下的单词串[^2]。 --- #### 方法三:基于 `getchar()` 的简单实现 另一种简洁的做法涉及调用函数 `getchar()` 来逐一获取来自终端的标准输入流上的每一个 ASCII 字符码点直至遇见指定分隔标记为止—即此处所指代的是普通的 LF 行尾指示符 (`'\n'`)。 ```cpp #include <iostream> #include <cstdio> #include <cstring> using namespace std; int main(){ string s[100], a, b; char ch; int i=0; // 开始录入过程... while(cin>>s[i]){ i++; if(getchar()=='\n') break; } cin>>a>>b; for(int j=0;j<i;j++) if(s[j]==a) s[j]=b; for(int j=0;j<i;j++) cout<<s[j]<<" "; return 0; } ``` 这段程序不仅实现了基础的需求还额外包含了替换特定子项逻辑演示[^3]。 --- ### 总结 以上三种方案分别针对不同场景提供了相应的解决方案。具体选择哪一种取决于实际应用场景以及个人偏好等因素考量。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值