当前位置: 首页 > 编程笔记 >

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

那开济
2023-03-14
本文向大家介绍C语言 scanf输入多个数字只能以逗号分隔的操作,包括了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;
}

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

 类似资料:
  • 我试图验证数字1-8的逗号分隔列表。

  • 问题内容: 我有一个像 我想把它分成那些字符串 如果我简单地打电话给我,那么在修剪之后我会得到不同的结果,因为在某些字符串中,例如,仍然有一个逗号。但我不想放在方括号中。有解决这个问题的优雅方法吗? 问题答案: 假设和没有嵌套和未转义。您可以使用以下方式进行拆分: 正则演示 如果逗号后面没有非圆括号和,则将匹配逗号,从而忽略和中的逗号。

  • 我试图理解scanf和输入缓冲区之间的关系。我将scanf与以下格式字符串一起使用: 并尝试理解为什么我可以输入尽可能多的空白(输入,空白,选项卡)后,我输入一个数字,如54,并按回车键。 据我所知,我按下的每一个键都会被放入输入缓冲区,直到我按下回车键。 因此,如果我输入54并按Enter键,输入缓冲区包含3个元素,两个数字和换行符。所以我的缓冲区看起来像[5][4][\n] 现在从左到右计算s

  • 问题内容: 我有一个像这样的字符串: 上面的字符串应分为: 问题答案: 我认为最简单的解决方案是处理输入字符串char-by-char: 例: 作为免费赠品,此解决方案还根据需要计算嵌套括号: 它还检查括号是否平衡(每个开放的括号都有相应的结束符)。

  • 我试图验证一个逗号分隔的数字列表1-31唯一(不重复)。 20、15、3 我尝试但是它接受重复的数字

  • 作为前言,我意识到还有其他关于逗号分隔数字的正则表达式的主题,但当我试图使用这些解决方案时,它们都不起作用。