首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么扫描不能读取我的输入?

为什么扫描不能读取我的输入?
EN

Stack Overflow用户
提问于 2016-08-22 00:59:22
回答 3查看 1.6K关注 0票数 3

我想使用scanf()阅读下表:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Q 1 3
U 2 6
Q 2 5
U 4 8

这是我的密码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>
#include <stdlib.h>

void main() {
    int *a;
    int i, j;

    a = (int *) malloc(4 * 3 *sizeof(int));

    printf("input:\n");
    for (i = 0; i < 4; i++) {
        for (j = 0; j < 3; j++) {
           scanf("%d", a + 3 * i + j);
        }
    }

    printf("output:\n");

    for (i = 0; i < 4; i++) {
        for (j = 0; j < 3; j++) {
           printf("%d  ", a[3*i+j]);
        }
        printf("\n");
    }   
}

但是,当我输入第一行Q 1 3时,这个程序就结束了。我也不知道原因?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-08-22 01:04:53

之所以会出现这种情况,是因为您向程序提供了一个非数字输入,希望用%d读取一个数字。由于Q不是一个数字,所以scanf失败。

但是,您的程序没有注意scanf的返回值,而是一直在失败状态下调用它。这个程序认为它得到了一些数据,而实际上却没有。

要解决这个问题,修改代码以在读取非数字字符时传递%c%s,检查scanf的返回值,并在scanf失败时删除无效的输入。

调用scanf时,它将返回与其提供的%说明符对应的值。下面是如何检查scanf的返回值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if (scanf("%d", a + 3 * i + j) == 1) {
    ...                   // The input is valid
} else {
    fscanf(f, "%*[^\n]"); // Ignore to end of line
}
票数 5
EN

Stack Overflow用户

发布于 2016-08-22 01:02:41

这是因为字母q不是一个数字,所以scanf会失败,并且不动输入缓冲区。因此,下一次迭代scanf将看到相同的q,然后再次失败,等等。

这将意味着实际上没有任何东西被读取到您分配的内存中,然后打印出未初始化的内存,从而导致未定义的行为。

解决问题的一种可能方法可能是读取行(例如使用fgets),然后使用sscanf一次性解析整行。也许就像

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for (i = 0; i < 4; i++) {
    char buffer[64];
    if (fgets(buffer, sizeof buffer, stdin) != NULL) {
        char c;  // The character
        int a, b;  // The integer values
        sscanf(buffer, "%c %d %d", &c, &a, &b);
        a[3 * i + 0] = c;
        a[3 * i + 1] = a;
        a[3 * i + 2] = b;
    }
}

我还建议您实际初始化所分配的内存,特别是如果您不使用其中的部分,但仍然打印出来。

票数 1
EN

Stack Overflow用户

发布于 2016-08-22 01:41:51

要么使用带有适当ASCII值的int变量的scanf(),要么使用带有char变量的scanf()作为字符,但在这两种情况下都使用%c。Q的ASCII码为81,U为85。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39075225

复制
相关文章
在restful api模式上使用JWT
在header头里面增加Authorization。在服务端验证的时候回通过取得这个值来验证回话的有效。
友儿
2022/09/11
8390
怎样使用React Context API [每日前端夜话0x26]
React Context API 【https://reactjs.org/docs/context.html】现在已经成为一个实验性功能,但是只有在 React 16.3.0 【https://reactjs.org/blog/2018/03/29/react-v-16-3.html】中才能用在生产中。本文将向你展示两个基本的 Web 商店应用程序,一个使用了 Context API 进行构建,另一个则不用。
疯狂的技术宅
2019/03/27
9330
怎样使用React Context API [每日前端夜话0x26]
在ListView上使用自定义的Adapter
需要实现的东西是: 一个DataListViewAdapter,当进行如下调用时,就能在列表上显示出数据:
LeoXu
2018/08/15
9670
使用Termux在Android上运行SSH服务器
借助出色的Termux终端仿真器应用程序,您可以在Android上运行SSH服务器。
用户5005176
2021/08/10
4.6K0
MySql在服务器上使用问题的总结
服务器是Windows Server 2012,我自己安装了一个MySql数据库,然后一个Web程序和客户端程序都想访问数据库,但是遇到一堆问题。主要是我仍然坚持使用.net 2.0,挂接MySql.Data 6.7.4版本。解决后记录一下
用户1075292
2023/05/03
1.1K0
MySql在服务器上使用问题的总结
使用nodejs编写api接口并部署到服务器上
1、安装node环境,没有就去看上一篇文章 2、创建一个node项目, 新建一个目录文件,例node_proxy 3、在新建的node项目执行npm init, 文件会生成一个package.json的文件 目录:
小吕
2022/06/16
8K0
使用nodejs编写api接口并部署到服务器上
Asp.net web api部署在某些服务器上老是404
asp.net web api部署在Windows服务器上后,按照WebAPI定义的路由访问,老是出现404,但定义一个静态文件从站点访问,却又OK。
guokun
2020/09/03
2.2K0
jira-api使用(上)
在jira操作中有些联动需求,例如需要查询一些数据并展示,在自带的筛选器中只能做单项操作,没法将多种查询进行自定义展示。通过API将查询结果进行自定义编排展示。
陈不成i
2021/07/05
9000
生产上还在使用GOLDENGATE HANDLECOLLISIONS
经常有朋友遇到ogg数据不一致或者遇到ogg replicate进程abend,比如1403错误之类,然后排除原因,大部分出现问题都是配置问题(少数情况下是bug),会造成业务统计数据不准或者涉及金额更麻烦(大库就比较麻烦,尤其报表库,主库数据都删除,报表数据不准了,最后pk吧),ogg虽然入门相对简单,使用这些参数之前,一定了解作用以及什么场景下适合使用。另外hanlecollisions与allownoopdates配合使用时候,allownoopdates作用失效.
徐靖
2020/08/05
8420
生产上还在使用GOLDENGATE HANDLECOLLISIONS
分享下 Backbone、Vue、Angular、React 在项目上的使用经验
上周,知乎上有几篇关于 Angular 和 Vue 对比的文章。本来想着的是,这些文章倒是可以指导下新手,作一些技术选型。可遗憾的是,开始的文章失去了一些偏颇,后面的文章则开始了一些攻击性行为。慢慢的,整个知乎上便是充满了一些戾气,开始了无尽的网络暴力。 于是,我想分享一下之前使用这些 MV* 框架的经验。 前端的摩尔时代 同样吧,在上周结束了《Expert Angular》的审校,这是第三本为 Packt 出版社审校的 Angular 的书。然后,先让我来讲个故事:一年前我开始审校的这本书,当时是基于 A
Phodal
2018/01/29
2.2K0
在以太坊上构建 GraphQL API
dapp[5]的数量继续爆炸性增长,对开发人员(使用 Solidity[6]或其他区块链语言的)的需求[7]也越来越大。
Tiny熊
2021/06/10
1.8K0
在以太坊上构建 GraphQL API
如何使用DevStack在Ubuntu服务器上安装OpenStack
OpenStack是专为云计算开发的自由开源平台。通过这个以云为中心的平台,虚拟机和其他资源可以作为基础设施即服务提供给客户。安装OpenStack有许多方法 - 有些方法更具挑战性。
星哥玩云
2022/07/13
1.8K0
如何使用DevStack在Ubuntu服务器上安装OpenStack
使用Flask在服务器实现一个API接口。
主要涉及到Python3、MySQL、Flask、Nginx、uwsgi这几个东西。
小F
2020/10/09
1.9K0
使用Flask在服务器实现一个API接口。
在JBOSS服务器上使用Myfaces的JSF实现
JBOSS AS服务器默认使用的JSF实现是SUN的RI,要把他替换成Myfaces需要:
EltonZheng
2021/01/22
8480
在 React 中使用 Storybook,构建强大的自定义 UI 组件
虽然像React这样的基于组件的UI库简化了web开发,但它们也引入了测试和调试等新的复杂性。
前端修罗场
2022/07/29
9.4K0
在 React 中使用 Storybook,构建强大的自定义 UI 组件
使用Autofac在ASP.NET Web API上实现依赖注入
【原文】 Dependency Injection with ASP.NET Web API and Autofac,以下为摘要: 在ASP.NET Web API里使用Autofac 通过NuGet安装Autofac.WebApi。(Nuget会安装依赖的Autofac.dll)。 PM > Install-Package Autofac.WebApi 引用如下命名空间。 using Autofac; using Autofac.Integration.WebApi; 代码配置Autofac 可参看ht
张善友
2018/01/30
1.5K0
使用 react Context API 的正确姿势
本文介绍一下 React 中常见的 Context API 的使用方式。在使用 Context API 之前,我们还需要知道为啥要使用。❓
JS菌
2019/04/10
1.6K0
使用 react Context API 的正确姿势
logistic回归:从生产到使用【上:使用篇】
logistic回归:从生产到使用【上:使用篇】 前面介绍过几个算法,如KNN、决策树等(在微信公众号“数说工作室”中回复“jrsj”查看,不要引号),都可以用若干个“属性变量”来预测一个“目标变量”
数说君
2018/03/28
1.4K0
logistic回归:从生产到使用【上:使用篇】
在Mac上搭建React Native开发环境
概述 前面我们介绍过在window环境下开发React Native项目,今天说说怎么在mac上搭建一个RN的开发环境。 配置mac开发环境 基本环境安装 1.先安装Homebrew:用于安装Node
xiangzhihong
2018/02/06
1.9K0
在Mac上搭建React Native开发环境
点击加载更多

相似问题

使用JNI从本机方法返回null

36

JNI -本机方法中的致命错误:传递给JNI的错误全局或本地引用。

12

JNI丢失了对本机方法的引用

21

如果没有在本机方法中创建本地引用,何时清除本地引用?

13

JNI本地与全局引用:不是有效的JNI引用

14
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文