C 中的 for 循环和 getchar()

2023-12-27

为什么代码偶数次直接获取到空数据?我不知道发生了什么事。 非常感谢。

    #include <stdio.h>
    #pragma warning(disable : 4996) 
    
    void main() {
        
        int f, a = 10, b = 20;
        for (int i = 0; i < 5; i++)
        {
            char ch;
            ch = getchar();
            printf("ch = %c\n", ch);
            switch (ch)
            {
                case '+': f = a + b; printf("f = %d\n", f); break;
                case '−': f = a - b; printf("f = %d\n", f); break;
                case '*': f = a * b; printf("f = %d\n", f); break;
                case '/': f = a / b; printf("f = %d\n", f); break;
                default: printf("invalid operator\n"); 
            }
    
        }
    
    }

如果我输入一个运算符,它会循环两次。第二次是空输入。


Let's say you typed a followed by Enter.

第一次致电getchar()回报a但换行符仍然保留在输入流中。下一个呼叫getchar()返回换行符而不等待您的输入。

有很多方法可以解决这个问题。最简单的方法之一是在调用后忽略该行的其余部分getchar().

ch = getchar();

// Ignore the rest of the line.
int ignoreChar;
while ( (ignoreChar = getchar()) != '\n' && ignoreChar != EOF );

您可以将其包装在一个函数中。

void ignoreLine(FILE* in)
{
   int ch;
   while ( (ch = fgetc(in)) != '\n' && ch != EOF );
}

and use

ch = getchar();

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

C 中的 for 循环和 getchar() 的相关文章

  • 无法使用已与其底层 RCW 分离的 COM 对象。在 oledb 中

    我收到此错误 但我不知道我做错了什么 下面的代码在backrgroundworker中 将异常详细信息复制到剪贴板 System Runtime InteropServices InvalidComObjectException 未处理 通
  • 如何在列表框项目之间画一条线

    我希望能够用水平线分隔列表框中的每个项目 这只是我用于绘制项目的一些代码 private void symptomsList DrawItem object sender System Windows Forms DrawItemEvent
  • WPF 中的调度程序和异步等待

    我正在尝试学习 WPF C 中的异步编程 但我陷入了异步编程和使用调度程序的困境 它们是不同的还是在相同的场景中使用 我愿意简短地回答这个问题 以免含糊不清 因为我知道我混淆了 WPF 中的概念和函数 但还不足以在功能上正确使用它 我在这里
  • 获取没有非标准端口的原始 url (C#)

    第一个问题 环境 MVC C AppHarbor Problem 我正在调用 openid 提供商 并根据域生成绝对回调 url 在我的本地机器上 如果我点击的话 效果很好http localhost 12345 login Request
  • 如何将图像和 POST 数据上传到 Azure 移动服务 ApiController 终结点?

    我正在尝试上传图片and POST表单数据 尽管理想情况下我希望它是json 到我的端点Azure 移动服务应用 我有ApiController method HttpPost Route api upload databaseId sea
  • 将目录压缩为单个文件的方法有哪些

    不知道怎么问 所以我会解释一下情况 我需要存储一些压缩文件 最初的想法是创建一个文件夹并存储所需数量的压缩文件 并创建一个文件来保存有关每个压缩文件的数据 但是 我不被允许创建许多文件 只能有一个 我决定创建一个压缩文件 其中包含有关进一步
  • Cython 和类的构造函数

    我对 Cython 使用默认构造函数有疑问 我的 C 类 Node 如下 Node h class Node public Node std cerr lt lt calling no arg constructor lt lt std e
  • Web API - 访问 DbContext 类中的 HttpContext

    在我的 C Web API 应用程序中 我添加了CreatedDate and CreatedBy所有表中的列 现在 每当在任何表中添加新记录时 我想填充这些列 为此目的我已经覆盖SaveChanges and SaveChangesAsy
  • 使用 System.Text.Json 即时格式化 JSON 流

    我有一个未缩进的 Json 字符串 例如 hash 123 id 456 我想缩进字符串并将其序列化为 JSON 文件 天真地 我可以使用缩进字符串Newtonsoft如下 using Newtonsoft Json Linq JToken
  • 在 ASP.NET Core 3.1 中使用包含“System.Web.HttpContext”的旧项目

    我们有一些用 Net Framework编写的遗留项目 应该由由ASP NET Core3 1编写的API项目使用 问题是这些遗留项目正在使用 System Web HttpContext 您知道它不再存在于 net core 中 现在我们
  • 从路径中获取文件夹名称

    我有一些路c server folderName1 another name something another folder 我如何从那里提取最后一个文件夹名称 我尝试了几件事 但没有成功 我只是不想寻找最后的 然后就去休息了 Thank
  • 如何衡量两个字符串之间的相似度? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 给定两个字符串text1 and text2 public SOMEUSABLERETURNTYPE Compare string t
  • 当操作繁忙时,表单不执行任何操作(冻结)

    我有一个使用 C 的 WinForms 应用程序 我尝试从文件中读取一些数据并将其插入数据表中 当此操作很忙时 我的表单冻结并且无法移动它 有谁知道我该如何解决这个问题 这可能是因为您在 UI 线程上执行了操作 将文件和数据库操作移至另一个
  • Discord.net 无法在 Linux 上运行

    我正在尝试让在 Linux VPS 上运行的 Discord net 中编码的不和谐机器人 我通过单声道运行 但我不断收到此错误 Unhandled Exception System Exception Connection lost at
  • 如何在 VBA 中声明接受 XlfOper (LPXLOPER) 类型参数的函数?

    我在之前的回答里发现了问题 https stackoverflow com q 19325258 159684一种无需注册即可调用 C xll 中定义的函数的方法 我之前使用 XLW 提供的注册基础结构 并且使用 XlfOper 类型在 V
  • 控制到达非 void 函数末尾 -wreturn-type

    这是查找四个数字中的最大值的代码 include
  • Process.Start 阻塞

    我正在调用 Process Start 但它会阻止当前线程 pInfo new ProcessStartInfo C Windows notepad exe Start process mProcess new Process mProce
  • 如何在 C++ BOOST 中像图形一样加载 TIFF 图像

    我想要加载一个 tiff 图像 带有带有浮点值的像素的 GEOTIFF 例如 boost C 中的图形 我是 C 的新手 我的目标是使用从源 A 到目标 B 的双向 Dijkstra 来获得更高的性能 Boost GIL load tiif
  • 限制C#中的并行线程数

    我正在编写一个 C 程序来生成并通过 FTP 上传 50 万个文件 我想并行处理4个文件 因为机器有4个核心 文件生成需要更长的时间 是否可以将以下 Powershell 示例转换为 C 或者是否有更好的框架 例如 C 中的 Actor 框
  • 使用按位运算符相乘

    我想知道如何使用按位运算符将一系列二进制位相乘 但是 我有兴趣这样做来查找二进制值的十进制小数值 这是我正在尝试做的一个例子 假设 1010010 我想使用每个单独的位 以便将其计算为 1 2 1 0 2 2 1 2 3 0 2 4 虽然我

随机推荐

  • UIGestureRecognizer 用于 UIView 的一部分

    我在 iOS 应用程序中使用 UIGestureRecognizer 但遇到了一些问题 我只希望手势在视图的某个区域起作用 因此我使用特定框架创建了一个新的 UIView 并将其添加到根视图中 手势工作正常 但现在唯一的问题是我无法单击新视
  • 如何使用 RSACryptoServiceProvider 解密加密文本?

    我已使用 RSACryptoServiceProvider 加密了文本 我导出了公钥和私钥 显然我只是想在解码器应用程序中公开公钥 所以我编写了如下代码 private const string PublicKey
  • 表单“onsubmit”没有被调用

    这是我的表格的一部分
  • 检查目录是否是符号链接?

    In os有一个函数os path islink PATH 它检查是否PATH是符号链接 但是如果当 PATH 是某个目录的符号链接时失败 相反 python 认为它是目录 os path isdir PATH 那么如何检查目录是否是链接呢
  • ConcurrentBag 实现中是否存在内存泄漏? [复制]

    这个问题在这里已经有答案了 可能的重复 ConcurrentBag 中可能存在内存泄漏吗 https stackoverflow com questions 5353164 possible memoryleak in concurrent
  • 如何在 Android 中发布图片

    我有这个表单 用于使用 HttpPost 将图像上传到服务器 我使用 HTML 表单完成了此操作 但它不适用于 Android 的 HttpPost 它回复 您没有选择要上传的文件 看来文件字段尚未发送
  • 在 iOS 上的广告中发送蓝牙 LE 数据

    我的应用程序作为蓝牙 LE 外围设备运行 我试图在广告中发送几个字节的自定义数据 func btStartBroadcasting peripheral CBPeripheralManager create an array of byte
  • 词形还原与词干提取之间有什么区别?

    我什么时候使用每个 另外 NLTK 词形还原是否依赖于词性 如果是的话不是更准确吗 短而密 http nlp stanford edu IR book html htmledition stemming and lemmatization
  • AOP::0 处错误,在两种不同方法上应用 aop 的绑定不一致

    我正在尝试在两个不同路径中的两种不同方法上应用 before 方面 class Service1 public Object applyX X x code class Service2 public OtherObject applyY
  • 如何控制 ggplot2 中的 bin 间隔?

    我无法正确控制垃圾箱是否来自例如 10 到 10 或从 0 到 20 当我说binwidth 20我得到前者 但我有从 1 开始的数据 我不希望间隔变为负值 这是我的问题的一个例子 testData data frame x c 1 4 6
  • 在 WPF 中按 Enter 键移动到下一个控件

    我想在 WPF MVVM 应用程序中按 Enter 键而不是 Tab 键时移动到下一个控件 我怎样才能实现这个目标 下面是我为此使用的附加属性 首先 示例用法
  • UITextView 内的动画 Gif

    我看了一下this https stackoverflow com questions 20930462 ios 7 textkit how to insert images inline with text问题 但没有成功 我也在努力避免
  • 在 MySQL 中比较时,转换为 varchar 或 varchar 为 int 更快吗?

    所以我有两个表 它们的 ID 引用同一对象 其中一个表将其存储为 varchar 另一个表将其存储为 int 我想要子查询 或者可能连接 这两个表 WHERE foo CAST bar AS UNSIGNED or WHERE CAST f
  • 睾丸:遇到声明异常

    我在 angular js 中定义了一个空模块 angular module todoList function 然后我想测试它 在我的conf js 我加载这些 javascript files JASMINE JASMINE ADAPT
  • 更改我的所有网站链接:最好的方法是什么? [复制]

    这个问题在这里已经有答案了 可能的重复 htaccess 重写以将根 URL 重定向到子目录 https stackoverflow com questions 990392 htaccess rewrite to redirect roo
  • 我应该如何避免记忆导致 Ruby 中的错误?

    对于如何避免由于可变状态而导致记忆错误是否存在共识 在此示例中 缓存结果的状态发生了变化 因此在第二次调用时给出了错误的结果 class Greeter def initialize greeting cache end def expen
  • Xcode 5 上的项目宽字匹配搜索

    我正在使用 Xcode 5 并且希望不是通过子字符串匹配而是通过精确匹配 或前缀匹配 来查找单词 例如 变量名 在文件范围搜索 Command F 中 我可以通过单击玻璃图标右侧的箭头按钮并选择 编辑查找选项 来使用文本搜索或正则表达式搜索
  • 如何轻松地从 MySQL 迁移到 PostgreSQL?

    我想在现有的 MySQL 数据库 大约 40 个表 400 MB 数据 变得更大之前将其迁移到 Postgres 我在网上搜索并尝试了一些迁移脚本 其中一些可以找到here http wiki postgresql org wiki Con
  • jenkins:通过 Groovy API 设置根 url

    我正在尝试通过 Groovy API 更新 Jenkins 的根 URL 这样我就可以编写 Jenkins master 的部署脚本 而无需手动输入 旁白 为什么像 Jenkins 这样受构建 devops 自动化社区欢迎的工具如此抵制 自
  • C 中的 for 循环和 getchar()

    为什么代码偶数次直接获取到空数据 我不知道发生了什么事 非常感谢 include