C 结构不扫描所有输入

2023-12-21

我有这个C代码:

#include "stdio.h"

main()
{
    struct books
    {
        char name[100],author[100];
        int year,copies;
    }book1,book2;

    printf("Enter details of first book\n");
    gets(book1.name);
    gets(book1.author);
    scanf("%d%d",&book1.year,&book1.copies);

    printf("Enter details for second book\n");
    gets(book2.name);
    gets(book2.author);
    scanf("%d%d",&book2.year,&book2.copies);

    printf("%s\n%s\n%d\n%d\n",book1.name,book1.author,book1.year,book1.copies);
    printf("%s\n%s\n%d\n%d\n",book2.name,book2.author,book2.year,book2.copies);  
}  

这里发生的事情是它只扫描到第二本书的作者姓名。之后它直接打印输出。

这是我的input:(前两行是最初的 printf 语句)

Enter details of first book
warning: this program uses gets(), which is unsafe.
the c programmign laguagne
dfadsda
3432
23
Enter details for second book
ruby on rails
mark hammers  

之后就直接打印输出:

the c programmign laguagne
dfadsda
3432
23

ruby on rails
0
0

这里有什么问题吗?我们还可以看到第二本书的名字被分配给作者。

我在用着gcc作为 Mac OS X ML 上的编译器。


使用fflush(stdin)在每个输入语句之前。该方法将清除输入缓冲区。 修改后您的代码将是 -

#include "stdio.h"

int main()
{
    struct books
    {
        char name[100],author[100];
        int year,copies;
    }book1,book2;

    printf("Enter details of first book\n");
    gets(book1.name);
    fflush(stdin);

    gets(book1.author);
    fflush(stdin);

    scanf("%d%d",&book1.year,&book1.copies);
    fflush(stdin);

    printf("Enter details for second book\n");
    gets(book2.name);
    fflush(stdin);

    gets(book2.author);
    fflush(stdin);
    scanf("%d%d",&book2.year,&book2.copies);

    printf("%s\n%s\n%d\n%d\n",book1.name,book1.author,book1.year,book1.copies);
    printf("%s\n%s\n%d\n%d\n",book2.name,book2.author,book2.year,book2.copies);  
    return 0;
} 

您可以查看有关的详细信息fflush() here http://www.cplusplus.com/reference/cstdio/fflush/.

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

C 结构不扫描所有输入 的相关文章

随机推荐

  • SSRS 传递报告参数

    我度过了艰难的一天 试图解决这个问题的根本问题 我有一个用户输入信息的表单 该信息通过 URL 传递到 SSRS 我收到错误 An error has occurred during report processing rsProcessi
  • UITextField 中的 UITextPosition

    有什么方法可以让我通过文本字段的 UITextRange 对象获取 UITextField 当前的插入符位置吗 UITextField 返回的 UITextRange 有什么用吗 UITextPosition 的公共接口没有任何可见成员 昨
  • 基于 Restful 的视频流

    使用 spring boot 我想制作基于 RESTful 的视频播放器 我的文件浏览器中有 mp4 扩展名的视频 如何通过创建休息端点在前端提供这些视频 我已经尝试过这个方法 http shazsterblog blogspot com
  • 如何在 Three.js 中更改脸部颜色

    我正在尝试更改网格单个面上的颜色 这是在 WebGL 上下文中 我可以改变整个网格的颜色 但不能改变单个面的颜色 相关代码如下 Updated Per Lee var camera this camera var projector new
  • 如何编写语法类似Python缩进的语言?

    我正在使用类似于 Python 的内置语言编写一个工具 我想让缩进在语法中有意义 以便行开头的制表符和空格代表命令的嵌套 做这个的最好方式是什么 我之前写过递归下降和有限自动机解析器 目前的CPython http en wikipedia
  • 仅对最近修改的文件运行 grunt-contrib-jshint

    我们正在一个非常大的网站上重构代码 我想对任何发生更改的文件强制执行 linting 但忽略其余文件 因为其中许多文件最终会被删除 所以整理它们是浪费时间 我想要一个 grunt 任务来检查文件的修改日期是否比其创建 从存储库获取 日期更新
  • Vue.js 在 setTimeout 后滚动到新页面路由的顶部

    当立即滚动到新路线的顶部时 我的页面转换效果不佳 我想等待 100 毫秒 然后它会自动滚动到顶部 以下代码根本不会滚动 有没有办法做到这一点 export default new Router mode history routes pat
  • elasticsearch.js 客户端连接被拒绝:Access-Control-Allow-Origin 无法识别?

    我一直在尝试使用elasticsearch jquery min js ping 本地运行的elasticsearch 每次都会收到 无活动连接 错误 ETA 在 Chrome 中 我看到看起来相当低级别的 连接被拒绝 我正在 MacOS
  • 使用切片值的 Golang 字符串格式

    在这里 我尝试从包含字符串的切片为我的 API 创建查询字符串 ie where node name node1 node name node 2 import fmt strings func main nodes string node
  • 函数内部多处理 scipy 优化的奇怪行为

    这是一个运行良好的简单代码 即使函数 minimize 包装了 scipy optimize minimize 它也不会抱怨酸洗 import numpy as np from scipy import optimize from mult
  • 重新使用对象的存储而不首先销毁它是UB吗?

    给定非 POD 类型T auto p new T new p T delete p 这是UB吧 显然我并没有直接泄漏为其分配的内存T 如果它没有间接成员 那么我根本不会泄漏任何东西 但它从未被破坏 在我看来 这似乎是自发毁灭由有感知的猫类生
  • 单行 INSERT 是原子的吗?例如。在有 1M 列的表上?

    单行 INSERT 是原子的 对于外部读取器 吗 想象一下它发生在一个有 1M 列的表上 在执行单个INSERT语句 即 单行 类型 是否有可能同时发生的读取操作 可能使用 读取未提交 隔离级别 仅读取some值 列 我对 MS SQL S
  • 如何通过策略将 Azure 资源锁应用到资源组

    我正在尝试创建一个 Azure 策略 该策略会将级别为 CanNotDelete 的资源锁部署到订阅内的资源组 目前该策略 100 合规 但该策略尚未创建任何锁定 我的 JSON policy rules 文件中有以下内容 if field
  • Spring/RabbitMQ 教程的 Docker 映像导致连接被拒绝

    我正在这里学习 Spring 教程 使用 RabbitMQ 发送消息 https spring io guides gs messaging rabbitmq 我发现了这个问题 但它没有解决我关于docker compose yml教程中找
  • 将所有 java swing gui 放在一个类中是否正常?

    我刚刚开始进行摇摆开发并且遇到了问题 将整个 GUI 放入一个类中正常吗 我正在构建的应用程序有一个显示多个不同 页面 的 JFrame 例如 如果用户单击按钮 他们将被带到具有不同布局的完全不同的页面 我已经配置了卡片布局 并且到目前为止
  • 如何从表格中显示最大值、最小值、中位数和平均值

    这张图上 就是user id 右边是每个用户的交易频率 如何显示该用户交易频率的最小值 最大值 中值和平均值 对于此类问题我需要进行什么计算 所以会出现中值最大最小值和平均值 检查这篇文章关于窗口函数 https help tableau
  • Web 应用程序的中央错误日志记录服务

    我即将启动一个新网站 我正在使用 Pingdom 来跟踪该网站的正常运行时间 但我感兴趣的是在一个中心位置记录该网站生成的任何错误 我想将代码放入顶级异常处理程序中 该处理程序将打包异常并将其发送到另一个应用程序 然后该应用程序会生成一封电
  • guava 是否有一个采用自定义哈希/等于函数的 Map 实现?

    任何人都知道Guava是否有与Functionaljava等效的版本HashMap http functionaljava googlecode com svn artifacts 3 0 javadoc fj data HashMap h
  • 有条件地在分类列中创建“其他”类别

    我有一个DataFrame df用一列 category使用以下代码创建 import pandas as pd import random as rand from string import ascii uppercase rand s
  • C 结构不扫描所有输入

    我有这个C代码 include stdio h main struct books char name 100 author 100 int year copies book1 book2 printf Enter details of f