C言語scanfは複数の数字を入力するとコンマで区切られた操作しかできません。
Cのscanfは複数の数字を入力してコンマで区切ることができます。スペースTABの空白文字で区切ることはできません。
補足知識:c++にカンマ区切りのデータセットを読み込みます。
例えば、面接と実際の応用では、符号間隔を指定するデータを読み込んで、配列の中に入れる場面がよくあります。
多くのブログを見て、今のところ簡単だと思う方法をまとめました。
基本的な考え方は、入力したデータをstringに読んで、stringの中の間隔記号をスペースで置換して、stingstreamストリームに入力して、指定されたファイルと配列に入力します。
具体的なコードは以下の通りです。
#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++にカンマ区切りのデータセットを読み込みます。
例えば、面接と実際の応用では、符号間隔を指定するデータを読み込んで、配列の中に入れる場面がよくあります。
多くのブログを見て、今のところ簡単だと思う方法をまとめました。
基本的な考え方は、入力したデータをstringに読んで、stringの中の間隔記号をスペースで置換して、stingstreamストリームに入力して、指定されたファイルと配列に入力します。
具体的なコードは以下の通りです。
// 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;
}
以上の考えは参考だけにして、もっといい案があれば、提出と検討を歓迎します。参考にしていただければと思いますが、どうぞよろしくお願いします。