C++ cin 和 CTRL + Z 问题

2024-01-07


我正在阅读《C++ Primer 5th》,我在练习中遇到了一些问题:

从 cin 读取单词序列并将值存储为向量。后 你已经阅读了所有单词,处理向量并将每个单词更改为 大写。打印转换后的元素,一行八个字。

我的代码是这样的:

#include <iostream>
#include <vector>
#include <string>
#include <cctype>

using std::vector;
using std::string;
using std::cin;
using std::cout;
using std::endl;

int main(){

    vector<string> words;
    string wordBuffer;
    vector<string> output(1);

    while (cin >> wordBuffer){
        words.push_back(wordBuffer);
    }

    for (string &word : words){
        for (char &letter : word){
            letter = toupper(letter);
        }
    }

    unsigned currentLine = 0;
    for (decltype(words.size())index = 0; index < words.size(); ++index){

        output[currentLine] += words[index] + " ";

        if ((index+1) % 8 == 0){
            ++currentLine;
            output.push_back("");
        }

    }

    for (string s : output){
        s[s.size() - 1] = 0; //removing the whitespace
        cout << s << endl;
    }

    system("pause");
    return 0;
}

现在,一切正常,但我在通过控制台输入单词时遇到问题。
如果我写

我正在写一个随机单词^Z

and press Enter nothing happens. I have to rewrite the ^Z after I have pressed the Enter, like here:

我正在写一个随机的单词
^Z

你能解释一下为什么吗?谢谢!

PS:我这么说是因为在我以前的程序中,在同一行中写入 ^Z 效果很好。就像这段代码一样:

#include <iostream>;


int main(){
    int currval = 0,val = 0;

        int count = 1;
        while (std::cin >> val){
            if (currval == val){
                ++count;
            }
            else {
                std::cout << "The number " << currval << " appears " << count << " times" << std::endl;
                currval = val;
                count = 1;
            }
        }
        std::cout << "The number " << currval << " appears " << count << " times" << std::endl;

    system("pause");

    return 0;
}

我不明白为什么:(


The ^Z has to be first in order for Windows to treat it as Ctrl+Z, otherwise it is just treated as meaningless characters.

如果您希望它像您所写的那样工作,我建议:

String wordBuffer("")
while (strcmp(wordBuffer[strlen(wordBuffer)-3], "^Z") != 0){
    words.push_back(wordBuffer);
    cin >> wordBuffer
}

EDIT: in your second example it works because when you read integers c++ knows to divide the given string of numbers in the space (or ENTER if the numbers are entered separately in every line) to read every number separately so if you'll enter:

123 2323 4545 43 ^Z

It will read 123, then 2323, ... and then ^Z and so it will be as though it got it in a separate line but when you read string, it cant do that because a string contain every symbol and so it separate the input in the ENTER pressed and that why the second one works

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ cin 和 CTRL + Z 问题 的相关文章

  • 编写此代码片段的有效方法是什么? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 更有效和 或更短地重写此代码以节省字节并显得不那么冗长的方法 if N 2 0 N 6 N 8 N 10 N 12 N 14 N 16 N
  • 在 C# 中使用“using”关键字避免多次处置的最佳实践

    当变量是 IDisposable 时 我们有using关键字来管理处置 但是如果我们在方法中返回值怎么办 using twice StringContent stringToStringContent string str using St
  • WebClient.DownloadDataAsync 冻结了我的 UI

    我在 Form 构造函数中的 InitializeComponent 之后有以下代码 using WebClient client new WebClient client DownloadDataCompleted new Downloa
  • 元组在 VS2012 中如何工作?

    Visual Studio 2012 功能 tuples但不是可变参数模板 这是如何完成的 如何在不使用可变模板的情况下实现元组 简而言之 微软做了与之前在 NET 中实现类似元组的数据类型完全相同的事情 创建许多版本 每个版本都有固定数量
  • 是否可以从 C++ 应用程序调用 C# 应用程序?

    我是一名编程学生 现在我已经上了两门 C 课程 这个学期我将参加我的第一门 C 课程 出于好奇 是否可以从 C 应用程序调用 C 应用程序 如果是的话 是否还可以检查运行该程序的计算机是否具有 NET框架 我只是很好奇 我想如果可能的话 这
  • XPATH 查询、HtmlAgilityPack 和提取文本

    我一直在尝试从名为 tim new 的类中提取链接 我也得到了解决方案 给出了解决方案 片段和必要的信息here https stackoverflow com questions 2982862 extracting a table ro
  • 并行化斐波那契序列生成器

    我正在学习并行化 在一项练习中 我得到了一些我应该提高性能的算法 其中之一是斐波那契数列生成器 array 0 0 array 1 1 for q 2 q lt MAX q array q array q 1 array q 2 我怀疑 这
  • MFC CList 支持复制分配吗?

    我在 MSVC 中查找了 CList 定义afxtempl h http www cppdoc com example mfc classdoc MFC AFXTEMPL H html并记录在MSDN http msdn microsoft
  • 将 OpenCV Mat 转换为数组(可能是 NSArray)

    我的 C C 技能很生疏 OpenCV 的文档也相当晦涩难懂 有没有办法获得cv Mat data属性转换为数组 NSArray 我想将其序列化为 JSON 我知道我可以使用 FileStorage 实用程序转换为 YAML XML 但这不
  • C++ 将联合强制转换为其成员类型之一

    以下对我来说似乎完全符合逻辑 但不是有效的 C 联合不能隐式转换为其成员类型之一 有人知道为什么不这样做的充分理由吗 union u int i char c function f int i int main u v v i 6 f v
  • 有什么方法可以重载 C# 中的扩展方法吗?

    我有以下模型模式 public abstract class PARENTCLASS public class CHILD A CLASS PARENTCLASS public static class EXTENSION public s
  • 用于连接 DataTable 上的动态列的动态 LINQ

    我目前遇到的情况不确定如何继续 我有两个从数据库填充的数据表 我还有一个可用的列名称列表 可用于将这两个数据表连接在一起 我希望编写一组 LINQ 查询 这些查询将 显示两个数据表中的行 内部联接 用于从一个数据表更新另一个数据表 显示一个
  • C# 中的 C/C++ 代码编译器

    在 C 中 我可以使用下面的代码编译 VB 和 C 代码 但无法编译 C C 代码 有什么办法可以做到这一点吗 C 编译器 public void Compile string ToCompile string Result null st
  • 为什么 f(i = -1, i = -1) 是未定义的行为?

    我正在读关于违反评估顺序 http en cppreference com w cpp language eval order 他们举了一个令我困惑的例子 1 如果标量对象上的副作用相对于同一标量对象上的另一个副作用是无序的 则行为未定义
  • 如何在dll级别读取app.config? [复制]

    这个问题在这里已经有答案了 我在一个解决方案中有一个控制台应用程序项目和库项目 dll The 图书馆项目有 app config 文件 我在其中存储我在库中使用的一些键值对 控制台应用程序引用此 dll 我有另一个 app config
  • 在哪里可以下载没有 Visual Studio 2010 的 C# 4.0 编译器?

    我知道 CTP VS 2010 映像 但我可以只下载 NET Framework 4 0 和 C 编译器吗 AFAIK VS 2010 CTP 仅作为 VM 映像提供 我不相信 Microsoft 发布了 VS 的安装程序 其中一个绝对不适
  • 这种尺寸对齐是如何工作的

    对于所提供的评论 我无法理解以下代码 这段代码的作用是什么 以及等效的代码是什么8 aligned segment size must be 4 aligned attr gt options ssize 3 Here ssize is o
  • 将 char 绑定到枚举类型

    我有一段与此非常相似的代码 class someclass public enum Section START MID END vector section Full void ex for int i 0 i section
  • 如何在c linux中收听特定接口上的广播?

    我目前可以通过执行以下操作来收听我编写的简单广播服务器 仅广播 hello int fd socket PF INET SOCK DGRAM 0 struct sockaddr in addr memset addr 0 sizeof ad
  • C++ Boost ASIO 简单的周期性定时器?

    我想要一个非常简单的周期性计时器每 50 毫秒调用我的代码 我可以创建一个始终休眠 50 毫秒的线程 但这很痛苦 我可以开始研究用于制作计时器的 Linux API 但它不可移植 I d like使用升压 我只是不确定这是否可能 boost

随机推荐

  • 为什么 Ansible 不读取相对路径中的模板?

    我正在使用 Ansible 但模板路径存在一些问题 这是我执行时的错误输出 ansible playbook i hosts site yml PLAY users GATHERING FACTS ok 10 0 3 240 TASK te
  • 在 Python 中使用字典代替 Case/Switch 语句

    我想随机化一个初始化为完整的魔方 所有颜色都在正确的侧面 我有旋转立方体的移动函数 我想连续随机选择 50 个函数来正确随机化它 我做这个项目是为了更多地了解 Python 因为我主要使用 C 而且我发现 Python 没有 case sw
  • 如何在页面加载之前提交ajax请求

    我想通过ajax请求检查用户的登录状态 根据用户是否登录 我想显示用户名 密码输入或用户名 目前 请求在 body onload 上发送 并显示 prgoress 指示器 直到响应到达 有没有更好的办法 我们假设需求规定不应有直接的服务器端
  • 如何修复汇编语言中的凯撒密码实现以读取多位密钥?

    我的代码实现了凯撒密码 它询问用户输入文件的名称 其中包含我想要加密 解密的字符串 输出文件的名称和密钥 密码 我的问题是它只读取密钥的第一个数字 如果我给它一个两位数的数字作为密钥 那么它只读取第一个 例如 14 15 它只读取 1 我该
  • React Hooks - 将引用传递给子级以使用 ScrollIntoView

    我有两个组件 一位父母和一个孩子 在父组件内我有一个按钮 如果用户单击该按钮 我想对子组件内的另一个按钮执行 ScrollIntoView 我想我想定义对子按钮 a 的引用 以便我在父按钮 onClick 中可以执行以下操作 ref scr
  • 如何使用 json 将图像发送到 iPhone 中的服务器?

    我正在使用 json 与服务器通信 我想发布并从服务器获取图像 如何将json格式的图像转换为发送它 以及当我们获取json格式的图像并将其转换回图像时 请参阅HTML 规范的相关部分 http www w3 org TR html401
  • kubernetes 私有注册表不起作用

    我按照以下链接配置 kubernetes 私有注册表 https github com kubernetes kubernetes tree master cluster addons registry https github com k
  • 错误:与“cc”链接失败:退出代码:1

    我有一个single rs 文件 当我编译它时rustc test1 rs 我收到错误 error linking with cc failed exit code 1 note cc m64 L usr local Cellar rust
  • 如何从页面加载时默认出现的选定文本中删除文本选择?

    当我们刷新或重新加载页面时 单击下面的图像部分 您可以在圆圈中间看到选定的文本 讨论目标和关注点 现金流量分析 税务分析 等等 例子 http ivyfa advisorproducts com financial planning pro
  • 在 where 子句中使用函数的 Oracle 性能

    在存储过程 有一个名为 paramDate 的日期参数 中 我有一个像这样的查询 select id name from customer where period aded to char paramDate mm yyyy Oracle
  • fetchedResultsContainer 核心数据中出现严重应用程序错误

    尝试添加记录时出现以下错误 严重的应用程序错误 例外 在核心数据更改期间被捕获 加工 这通常是一个错误 在观察者之内 NSManagedObjectContextObjectsDidChangeNotification 索引 0 对于 us
  • Android 应用程序中的音频声音太低

    我录制了一些音频文件以在我的应用程序中使用 大约有 50 个 所以我不想再次录制所有音频文件 我最近使用 SoundPool 在真实设备而不是模拟器上播放音频文件 你几乎听不到它们 在模拟器上 我的电脑音量设置为最大 设备音量设置为最大 我
  • 如何在Flexbox中每行显示3个项目?

    我有一个列表 我想显示我的li水平元素 每行 3 个 我一直在努力得到我想要的东西 但没有运气 有解决办法吗 div class serv ul foreach App Http Controllers HomeController get
  • 是否有 Linq 方法可以将单个项目添加到 IEnumerable 中?

    我正在尝试做这样的事情 image Layers 它返回一个IEnumerable对于除Parent层 但在某些情况下 我只想这样做 image Layers With image ParentLayer 因为与通常使用的数百次相比 它只在
  • Git pull:错误:条目 foo 未更新。无法合并

    我正在尝试从远程分支更新我的存储库 并且当我执行 git pull 时不断收到此错误 我没有进行任何本地更改 即使做了 我也不需要保留它们 我试过了 git reset hard 我遇到了同样的问题 似乎唯一有效的方法是删除有问题的文件并再
  • PDO 获取多个插入 ID

    使用 PDO 运行以下查询 实际上 我使用准备好的语句 但有同样的问题 INSERT INTO MyTable MyField VALUES Row1 Row2 如何获取与以下内容相关的记录的 IDRow1 and Row2 db gt l
  • 有 C++ 的在线名称解析器吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我收到了一个相当长且令人困惑的链接错误 如果我可以将其粘贴到某个网站上的某个文本框中并为我提供未损坏的
  • Python:通过向上舍入将列表中的 # 个值分配给 bin

    我想要一个可以接受一系列和一组垃圾箱的函数 并且基本上四舍五入到最近的垃圾箱 例如 my series 1 1 5 2 2 3 2 6 3 def my function my series bins my function my seri
  • Android:DatePicker 无法在 Activity 内工作

    在我的应用程序中 我有一个选项卡栏 我使用 ActivityGroup 将内容加载到每个选项卡中 如下所示 public class FirstGroup extends ActivityGroup Keep this in a stati
  • C++ cin 和 CTRL + Z 问题

    我正在阅读 C Primer 5th 我在练习中遇到了一些问题 从 cin 读取单词序列并将值存储为向量 后 你已经阅读了所有单词 处理向量并将每个单词更改为 大写 打印转换后的元素 一行八个字 我的代码是这样的 include