私は演習課題でサイコロを最大六回まで投げて、そのサイコロの目の和を出したいプログラムを作成しております。
標準入力で以下の数字を入力します
例1
5
3 4 5 2 1
例2
3
2 3 1
上の5はサイコロを投げた回数
下の数字はサイコロを投げた目をfgets()とsscanf()で呼び込みたいです。
下のfor文で一行目のサイコロを投げた回数をn回回して、その合計値をb=b+m;で足し算をしたと考えております。
ここで困っているのが、下の数字のスペース区切りで入力した数字をn回読み込むためにはsscanf()でどのような読み込み方をすればよいでしょうか?
以下私が途中まで作成したコードです。
#include <stdio.h>
int main(void){
char str[1000];
int n;
int m;
int b;
fgets(str, sizeof(str), stdin);
sscanf(str,"%d",&n);
fgets(str,sizeof(str),stdin);
sscanf(str,"%d ",&m);
for(int i =0;i<n;i++){
// m = strtok(NULL," ");
printf("%d\n", m);
b=b+m;
}
printf("%d", b);
return 0;
}
fgetsとsscanfで複数の数字を読み込みたいです。
Re: fgetsとsscanfで複数の数字を読み込みたいです。
書式%nを使うとそこまでに読み込んだバイト数を取得できるので、
これを用いて読み込む位置をずらしていくといいでしょう。
これを用いて読み込む位置をずらしていくといいでしょう。
#include <stdio.h>
int main(void){
char str[1000];
int n;
int m;
int i;
char* p;
fgets(str, sizeof(str), stdin);
sscanf(str, "%d", &n);
fgets(str, sizeof(str), stdin);
p = str;
for (i = 0; i < n; i++) {
int len;
if (sscanf(p, "%d%n", &m, &len) != 1) {
fputs("read error\n", stderr);
return 1;
}
printf("i = %d, m = %d, len = %d\n", i, m, len);
p += len;
}
return 0;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: fgetsとsscanfで複数の数字を読み込みたいです。
&が全角のため、コンパイルできないはずです。
コードを貼るときは、最新版をコピペして、
codeタグと/codeタグにはさんでください。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
Re: fgetsとsscanfで複数の数字を読み込みたいです。
#2 をお借りして VisualStudio2019 で実行
#include <stdio.h>
int main(void){
char str[1000];
int n;
int m;
int i;
int b=0;
char* p;
fgets(str, sizeof(str), stdin);
sscanf(str, "%d", &n);
fgets(str, sizeof(str), stdin);
p = str;
for (i = 0; i < n; i++) {
int len;
if (sscanf(p, "%d%n", &m, &len) != 1) {
fputs("read error\n", stderr);
return 1;
}
printf("i = %d, m = %d, len = %d\n", i, m, len);
p += len;
b += m;
}
printf("m合計= %d", b);
return 0;
}
Re: fgetsとsscanfで複数の数字を読み込みたいです。
c:\b>cl c1.c
Microsoft(R) C/C++ Optimizing Compiler Version 19.26.28806 for x86
Copyright (C) Microsoft Corporation. All rights reserved.
c1.c
Microsoft (R) Incremental Linker Version 14.26.28806.0
Copyright (C) Microsoft Corporation. All rights reserved.
/out:c1.exe
c1.obj
c:\b>c1
5
3 4 5 2 1
i = 0, m = 3, len = 1
i = 1, m = 4, len = 2
i = 2, m = 5, len = 2
i = 3, m = 2, len = 2
i = 4, m = 1, len = 2
m合計= 15
c:\b>C
Re: fgetsとsscanfで複数の数字を読み込みたいです。
皆さんアドバイスをありがとうございます。
先ほど#2のソースコードを引用して実行したら、イメージにほとんど近い結果が実行できました。
色々詳しく教えて頂き誠にありがとうございます。
先ほど#2のソースコードを引用して実行したら、イメージにほとんど近い結果が実行できました。
色々詳しく教えて頂き誠にありがとうございます。