C语言 scanf输入多个数字只能以逗号分隔的操作

C之scanf输入多个数字只能以逗号分隔,而不能用空格 TAB空白符分隔

#include <stdio.h>
int main()
 {
 int num_max(int x,int y,int z);
 int a,b,c,max;
 scanf("%d,%d,%d",&a,&b,&c);
 max=num_max(a,b,c);
 printf("max=%d",max);
 return 0;
 }
int num_max(int x,int y,int z)
 {
 int max=z;
 if(max<x)max=x;
 if(max<y)max=y;
 return(max);
 }

原因是scanf 对于数字输入,会忽略输入数据项前面的空白字符。因此只能以逗号分隔。

补充知识:c++中读入逗号分隔的一组数据

如题,在面试和实际应用中,经常会碰到一个场景:读入以指定符号间隔的一组数据,放入数组当中。

看了不少博客,总结了一个个人目前觉得比较简便的方法(其实和java比也一点不简便。。。。)

基本思路就是:将输入的数据读到string中,然后将string中的间隔符号用空格代替后,输入到stringstream流中,然后输入到指定的文件和数组中去

具体代码如下:

// cin,.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "iostream"
#include <string>
#include <sstream>
using namespace std; 

int _tmain(int argc, _TCHAR* argv[])
{
 string strTemp;
 int array[4];
 int i = 0;
 stringstream sStream;

 cin >> strTemp;
 int pos = strTemp.find(',');
 while (pos != string::npos)
 {
 strTemp = strTemp.replace(pos, 1, 1, ' '); //将字符串中的','用空格代替
 pos = strTemp.find(',');
 }

 sStream << strTemp; //将字符串导入的流中
 while (sStream)
 {
 sStream >> array[i++];
 }

 for (int i = 0; i < 4; i++)
 {
 cout << array[i] << " ";
 }
 cout << endl;
 return 0;
}

以上思路仅供参考,如果有更好的方案,欢迎提出和探讨。希望能给大家一个参考,也希望大家多多支持我们。

时间: 2020-12-09

解决scanf_s输入%d%c%d格式错误的问题

例题: 定义变量a,b,c,输入1+2,结果a=1,b=+,c=2 错误实例: int a,c; char b; scanf_s("%d%c%d",&a,&b,&c); 乍一看,没啥问题,但是一运行输入就会报错. 解决方案: 1.使用scanf,上边的代码就没问题 2.如果使用scanf_s,就要加上输入长度,如下 scanf_s("%d%c%d",&a,&b,1,&c); 补充知识:scanf("%d%d&

c/c++ 利用sscanf进行数据拆分操作

sscanf使用示例 示例:使用sscanf分割文件中的数据,数据源示例如下 川EZ1E58,贵GQ7708,:1302 贵AE0996,:185 贵A0PJ06,贵JYN192,贵JYN192,:128 分割代码如下所示: #include <stdio.h> #include <string.h> int DealLine(char *StrLine) { // find : data save char Parkid[20] = ""; char *p =

C语言清除scanf()缓存的案例讲解

又重新过一遍C语言,感觉每次重学C语言都有不同的感受,遇到了一个问题,就是scanf()这个问题,其实细究起来,也有很多可以值得深挖的,实际上每次细细的挖掘的话,都是对C语言的更透彻的认识. 那么下面我就对scanf()中清除输入缓冲区的方法讲解: 应用场景:我们使用多个scanf()的时候,如果输入缓冲区还有数据的话,那么scanf()就不会询问用户输入,而是直接就将输入缓冲区的内容拿出来用了,这就导致了前面的错误影响到后面的内容,为了隔离这种问题, 总的思想:通过各种方法将输入缓冲区的内容读

解决C语言中使用scanf连续输入两个字符类型的问题

昨天用C编程,遇到一个关于scanf的细节问题,假如运行如下程序: #include<stdio.h> int main() { char ch1,ch2; printf("Input for ch1:/n"); scanf("%c",&ch1); printf("ch1=%c/n",ch1); printf("Input for ch2:/n"); scanf("%c",&ch

C++ 输入scanf()和输出printf()的操作

在C语言中是用printf函数进行输出,用scanf函数进行输入的.C++保留了C语言的这一用法,在此只作很简单的介绍. scanf函数一般格式是: scanf(格式控制, 输出表列) printf函数的一般格式是 printf(格式控制,输出表列) [例3.4]用scanf和printf函数进行输入和输出. #include <iostream> using namespace std; int main( ) { int a; float b; char c; scanf("%d

keras 获取某层的输入/输出 tensor 尺寸操作

获取单输入尺寸,该层只被使用了一次. import keras from keras.layers import Input, LSTM, Dense, Conv2D from keras.models import Model a = Input(shape=(32, 32, 3)) b = Input(shape=(64, 64, 3)) conv = Conv2D(16, (3, 3), padding='same') conved_a = conv(a) # 到目前为止只有一个输入,以下

MyBatis输入映射和输出映射实例详解

什么是 MyBatis ? MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录. 我们知道,mapper.xml是我们配置操作数据库的sql语句的地方.其中每个sql语句对应着一个方法,每个方法都有自己的

linux shell数据重定向(输入重定向与输出重定向)详细分析

在了解重定向之前,我们先来看看linux 的文件描述符. linux文件描述符:可以理解为linux跟踪打开文件,而分配的一个数字,这个数字有点类似c语言操作文件时候的句柄,通过句柄就可以实现文件的读写操作. 用户可以自定义文件描述符范围是:3-num,这个最大数字,跟用户的:ulimit –n 定义数字有关系,不能超过最大值. linux启动后,会默认打开3个文件描述符,分别是:标准输入standard input 0,正确输出standard output 1,错误输出:error outp

Angular4的输入属性与输出属性实例详解

本文实例讲述了Angular4的输入属性与输出属性.分享给大家供大家参考,具体如下: Angular4输入属性 输入属性通常用于父组件向子组件传递信息 举个栗子:我们在父组件向子组件传递股票代码,这里的子组件我们叫它app-order 首先在app.order.component.ts中声明需要由父组件传递进来的值 order.component.ts ... @Input() stockCode: string @Input() amount: string ... order.compone

C++实现将输入复制到输出的方法

本文实例讲述了C++实现将输入复制到输出的方法.分享给大家供大家参考.具体实现方法如下: 将输入复制到输出的程序, 并将其中的制表符替换为\t, 把回退符替换为\b, 把反斜杠替按为\\ #include <stdio.h> main() { int ch; ch=getchar(); while(ch != EOF){ if(ch == '\t'){ putchar('\\'); putchar('t'); } else if(ch == '\b'){ putchar('\\'); putc

java 键盘输入一个数,输出数组中指定元素的示例

如下所示: package com.lcn.day05; import java.util.Scanner; public class ArrayDemo7 { /** *键盘输入一个数,输出数组中指定元素 */ public static void main(String[] args) { // 定义一个数组 int[] array = new int[]{123,456,789,321,654,987}; //创建输入对象 Scanner sc = new Scanner(System.i

TensorFlow查看输入节点和输出节点名称方式

TensorFlow 定义输入节点名称input_name: with tf.name_scope('input'): bottleneck_input = tf.placeholder_with_default( bottleneck_tensor, shape=[batch_size, bottleneck_tensor_size], name='Mul') TensorFlow查看pb数据库里面的输入节点和输出节点: import tensorflow as tf import os mo

OpenCV实现鼠标框选并显示框选区域

本文实例为大家分享了OpenCV实现鼠标框选并显示框选区域的具体代码,供大家参考,具体内容如下 cvSetImageROI函数(基于给定的矩形设置图像的ROI(感兴趣区域,region of interesting)) void cvSetImageROI(IplImage* image,CvRect rect) 参数: image 图像头,待处理图像 rect ROI 感兴趣区域矩形 cvResetImageROI函数(释放基于给定的矩形设置图像的ROI(感兴趣区域,region of int

C语言实现学生信息管理系统(文件版)

本文实例为大家分享了C语言实现学生信息管理系统的具体代码,供大家参考,具体内容如下 下面是我自己用写的学生信息管理系统,为了增加数据的利用率,分为学生端和教师端,同时实现账号密码登录,以文件的形式将其存入. 代码如下 #include <stdio.h> #include <string.h> #include <string> #include<Windows.h> #define USER "TOM" // 事先定义用户名,用于登录页

python基础教程之popen函数操作其它程序的输入和输出示例

一.函数介绍 1.1 函数原型: 复制代码 代码如下: #include <stdio.h>FILE *popen(const char *command,const char *open_mode); 1.2 说明 popen函数允许一个程序将另一个程序作为新进程启动,并可以传递数据给它或者通过它接收数据.command字符串是要运行的程序名和相应参数(比如:ls或ls -l),openmode必须是 r 或w.如果是r,被调用程序的输出可以被调用它的程序使用:如果是w,调用程序就可以用fw