###前提・実現したいこと
AOJ 1_5Aの問題で、よくないとされるscanf以外を使用した解決を図りたいです。
問題内容は、
トランプの枚数が足りないので現在持っているカードを入力して、そこから何が足りないかを出力するというものです。
###発生している問題
入力された文字を分割ができない
###該当のソースコード
#include <stdio.h> #include <string.h> #include <stdlib.h> int main(void) { char tmp[1000]; //現在のカード枚数・数字に変換 fgets(tmp, sizeof(tmp), stdin); int loop=atoi(tmp); int spade[13] = { 1,2,3,4,5,6,7,8,9,10,11,12,13 }; int heart[13] = { 1,2,3,4,5,6,7,8,9,10,11,12,13 }; int dia[13] = { 1,2,3,4,5,6,7,8,9,10,11,12,13 }; int club[13] = { 1,2,3,4,5,6,7,8,9,10,11,12,13 }; int i; //カード枚数ループ for (i = 0; i < loop;i++) { //マークと数字を入力・分割 char card[10]; fgets(card, sizeof(card), stdin); char mark; int num; sscanf(card,"%c%d",mark,&num); //マークで判断 //対応した数字を引くことで不足ではないことを確認 switch (mark) { case 'S': spade[num - 1] -= num; break; case 'H': heart[num - 1] -= num; break; case 'C': club[num - 1] -= num; break; case 'D': dia[num - 1] -= num; break; } } //カード枚数ループ終了 //出力は完成しているので省略
###試したこと
strtokによる文字列の分割
数字の分割はatoi(strtok())で行えましたが、fgetsによる分割がどうしてもできませんでした。
fgetsとsscanfについて調べても、元々入力されていたものからの分割、ファイル読み込みからの分割方法しかわかりませんでした。
###補足情報(言語/FW/ツール等のバージョンなど)
paiza.io
visual studio
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。