回车 换行区别,怎么读入char型vector

本文介绍了C++中多种输入处理方法,包括cin、cin.get()、cin.getline()、getline()及gets()等函数的使用场景与注意事项,并探讨了如何正确读取vector<char>等内容。

getline(cin,str)其中一个为流一个为string。

sstream可以自动实现类型转换。合理利用line word。。



C++中cin、cin.get()、cin.getline()、getline()、gets()等函数的用法

http://www.cnblogs.com/flatfoosie/archive/2010/12/22/1914055.html


怎么读入vector<char>用getchar,再加一个判断、n break


简而言之,打字机要回车,回到开头 carriage  return 还需要换行 line feed,windows在文件里都有,linux只回车

http://feihu.me/blog/2014/end-of-line/

今天,我总算搞清楚"回车"(carriage return)和"换行"(line feed)这两个概念的来历和区别了。

在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。

于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做"回车",告诉打字机把打印头定位在左边界;另一个叫做"换行",告诉打字机把纸向下移一行。

这就是"换行"和"回车"的来历,从它们的英语名字上也可以看出一二。

后来,计算机发明了,这两个概念也就被般到了计算机上。那时,存储器很贵,一些科学家认为在每行结尾加两个字符太浪费了,加一个就可以。于是,就出现了分歧。

Unix系统里,每行结尾只有"<换行>",即"\n";Windows系统里面,每行结尾是"<回车><换行>",即"\r\n";Mac系统里,每行结尾是"<回车>"。一个直接后果是,Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。

(完)


#include "guanka1.h" //#include "enter.h" #include <iostream> #include <vector> #include <cstdlib> #include <ctime> using namespace std; // 打印向量 void printVector(const vector<int>& coins) { for (int w : coins) cout << w << " "; cout << endl; } void press_enter_to_continue1() { cout << "\n按回车键继续..."; cin.get(); // 吃掉之前的换行 while (cin.get() != '\n'); // 再次等待用户按回车 } int balance(const vector<int>& weights, const vector<int>& left, const vector<int>& right) { int sumLeft = 0, sumRight = 0; for (int i : left) sumLeft += weights[i]; for (int i : right) sumRight += weights[i]; // 输出调试信息 cout << " 称重: ["; for (size_t i = 0; i < left.size(); ++i) { cout << left[i] << (i == left.size() - 1 ? "" : ","); } cout << "] vs ["; for (size_t i = 0; i < right.size(); ++i) { cout << right[i] << (i == right.size() - 1 ? "" : ","); } cout << "] -> "; if (sumLeft < sumRight) { cout << "左边轻" << endl; return -1; } else if (sumLeft > sumRight) { cout << "左边重" << endl; return 1; } else { cout << "平衡" << endl; return 0; } } // 分治查找异常书籍(返回其索引) int findbook(const vector<int>& books, const vector<int>& weights) { int n = books.size(); // 只剩一本书,直接返回 if (n == 1) { return books[0]; } // 二分法拆分:确保每次分组尽量平均,最终会缩减到两本书 int mid = n / 2; vector<int> groupLeft(books.begin(), books.begin() + mid); vector<int> groupRight; int extra = -1; // 处理奇数情况,保证左右两组数量相同 if (n % 2 == 0) { groupRight = vector<int>(books.begin() + mid, books.end()); } else { groupRight = vector<int>(books.begin() + mid, books.end() - 1); extra = books.back(); // 单独保留最后一个元素 } int result = balance(weights, groupLeft, groupRight); if (result == 1) { // 左边重,异常在左组 return findbook(groupLeft, weights); } else if (result == -1) { // 右边重,异常在右组 return findbook(groupRight, weights); } else { // 平衡,异常是额外的那本(如果是奇数) // 当额外元素存在且数量为1时,直接返回;否则继续拆分 if (extra != -1) { return findbook({ extra }, weights); } else { // 理论上不会走到这里,确保代码完整性 return findbook(groupLeft, weights); } } } // 等待用户按下1键和2键 void waitForUserChoice() { // 第一步:等待按1键 cout << "按 1 键 - 进入迷失的魔杖" << endl; char key1; do { cin >> key1; if (key1 != '1') { cout << "请按 1 键继续!" << endl; } } while (key1 != '1'); // 第二步:等待按2键 cout << "欢迎来到魔法学院图书馆!" << endl; cout << "快来完成关卡挑战吧" << endl; cout << "\n按 2 键 - 第一关" << endl; char key2; do { cout << "请输入选择: "; cin >> key2; if (key2 != '2') { cout << "请按 2 键开始!" << endl; } } while (key2 != '2'); cout << "\n第一关" << endl; cout << "寻找地图" << endl; cout << "地图就在图书馆魔法书中,快来寻找吧" << endl; cout << "欢迎来到图书馆,魔法书书架" << endl; cout << "\n按回车键开始..."; cin.ignore(); cin.get(); } bool playguanka1() { waitForUserChoice(); srand(time(0)); const int N = 35; // 35本书 const int TRUE_WEIGHT = 100; const int FALSE_WEIGHT = 108; // 地图书更重 vector<int> weights(N, TRUE_WEIGHT); // 所有书默认正常重量 int fakeIndex = rand() % N; // 随机选一本作为异常书 weights[fakeIndex] = FALSE_WEIGHT; // 设置异常重量 cout << "图书总数: " << N << endl; // 初始化所有图书编号 [0, 1, ..., 34] vector<int> allBooks(N); for (int i = 0; i < N; ++i) allBooks[i] = i; cout << "\n开始称重过程..." << endl; int result = findbook(allBooks, weights); cin.ignore(); cin.get(); int player_guess; cout << "请根据推理,输入你认为是异常图书的编号 (0-34): "; cin >> player_guess; if (player_guess < 0 || player_guess >= N) { cout << "输入无效!必须是 0 到 34 之间的数字。\n"; cout << "查找失败。\n"; return false; } // 判断是否正确 cout << "\n=> 你的答案是: " << player_guess << endl; if (player_guess == fakeIndex) { cout << "查找正确!" << endl; cout << "你获得了夹在书里的地图" << endl; press_enter_to_continue1(); return true; } else { cout << "错误!请再想想 " << endl; return false; } }列举实验中实现算法的主要函数,并对函数作简要说明
10-27
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值