下記の任意個数の数のgcd(最大公約数)を求めるプログラムですが、
一回答えを求めた後に、「整数を入力してください:」と表示されて終わりになってしまいます。
無限ループで回して、何回もgcdを求めるようにしたいのですが、可能でしょうか?
書き方の分かる方、御教示ください。
#include <stdio.h>
#include <stdlib.h>
int gcd(int x, int y) {
int temp;
if( x < y ) { temp = x; x = y; y = temp; }
if( y < 1 ) return -1;
if( x % y == 0 ) return y;
return gcd( y, x % y );
}
int ngcd(int n, int a[]) {
int i, d;
d = a[0];
for (i=1; i<n && d !=1; i++)
d = gcd(a[i], d);
return d;
}
int main(void) {
int i;
char s[2];
static int a[100];
for ( ; ; ) {
printf("整数を入力してください: ");
for (i=0; i<100; i++) {
if (scanf("%*[^0123456789\n]%1[\n]", s) == 1) break;
if (scanf("%d", &a[i]) != 1) break;
}
if (i == 0) break;
printf("最大公約数 = %d\n", ngcd(i, a));
}
return EXIT_SUCCESS;
}
下記の記述だけでやりたいことはできるようになりました。
ありがとうございました。
for (;;) {
printf("整数を入力してください: ");
for (i = 0; i<100; i++) {
if (scanf_s("%d", &a[i]) != 1) {
fflush(stdin);
break;
}
}
if (i == 0) break;
printf("最大公約数 = %d\n", ngcd(i, a));
}
No.1
- 回答日時:
scanfは難しいので、普通にfgets+sscanfを使いましょう。
(前略)
char buf[1000];
(中略)
for (i=0; i<100; i++) {
fgets(buf,sizeof buf,stdin);
if(sscanf(buf,"%d",&a[i])!=1) break;
}
(後略)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# C言語階乗の総和を求める 2 2023/03/04 23:31
- C言語・C++・C# C言語でif文が予想と違う動きをする件について7 4 2023/03/20 00:26
- C言語・C++・C# C言語 3 2022/11/09 13:27
このQ&Aを見た人はこんなQ&Aも見ています
-
10代と話して驚いたこと
先日10代の知り合いと話した際、フロッピーディスクの実物を見たことがない、と言われて驚きました。今後もこういうことが増えてくるのかと思うと不思議な気持ちです。
-
人生最悪の忘れ物
今までの人生での「最悪の忘れ物」を教えてください。 私の「最悪の忘れ物」は「財布」です。
-
治せない「クセ」を教えてください
なくて七癖という言葉どおり、人によっていろいろなクセがありますよね。 あなたには治せないクセがありますか?
-
何歳が一番楽しかった?
自分の人生を振り返ったとき、何歳のころが一番楽しかったですか? 子供の頃でしょうか、それとも大人になってからでしょうか。
-
我が家のお雑煮スタイル、教えて下さい
我が家のお雑煮スタイル、教えて下さい! (お汁)味噌汁系? すまし汁系? (お餅)角餅? 丸餅? / プレーンなお餅? あんこ餅?
-
数字以外が入力されたらエラー文を出したい。
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「黒歴史」教えて下さい
- ・2024年においていきたいもの
- ・我が家のお雑煮スタイル、教えて下さい
- ・店員も客も斜め上を行くデパートの福袋
- ・食べられるかと思ったけど…ダメでした
- ・【大喜利】【投稿~12/28】こんなおせち料理は嫌だ
- ・前回の年越しの瞬間、何してた?
- ・【お題】マッチョ習字
- ・モテ期を経験した方いらっしゃいますか?
- ・一番最初にネットにつないだのはいつ?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・2024年に成し遂げたこと
- ・3分あったら何をしますか?
- ・何歳が一番楽しかった?
- ・治せない「クセ」を教えてください
- ・【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語での引数の省略方法
-
「指定されたキャストは有効で...
-
最早開始時間と最遅完了時刻を...
-
ラップ関数とはどんなものですか?
-
複数桁10進数の*桁目だけを抽出...
-
#define _CRT_SECURE_NO_WARNIN...
-
足して100になるような乱数のア...
-
C言語 エラーの原因がわからな...
-
【C++】関数ポインタの使い方
-
C言語 プログラミング
-
read関数をノンブロッキングで...
-
実数の整数部,小数部の取得
-
Win32APIで作るコンボボックス...
-
入力を待たずにstdinの監視をし...
-
剰余演算を論理演算と加減算に...
-
(int *)の意味
-
部分行列の抜き出し(C言語)
-
C++の関数をCで呼ぶには??
-
C言語で、数値の桁数を求めるに...
-
シェルピンスキーのギャスケット
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
複数桁10進数の*桁目だけを抽出...
-
C言語 エラーの原因がわからな...
-
#define _CRT_SECURE_NO_WARNIN...
-
ラップ関数とはどんなものですか?
-
【C++】関数ポインタの使い方
-
if と配列の組み合わせ
-
(int *)の意味
-
実数の整数部,小数部の取得
-
acceptをalarmでタイムアウトさ...
-
C言語
-
std::set<int> で、ある値が何...
-
因数分解を行うプログラムについて
-
数字列を3桁ごとにカンマで区切...
-
(マルチスレッド)_beginthrea...
-
比較回数と交換回数表示について
-
式は定数値が必要です」という...
-
int型の変数値をバイト列として...
-
c言語の配列を使ってサイコロを...
おすすめ情報
ご指摘の箇所を参考にして、下記のように書き直してみたのですが、文字を入れた後に
だんまりになってしまいます。
何が悪いのでしょうか?
if (scanf("%*[^0123456789\n]%1[\n]", &s) != 1) {
fflush(stdin);
continue;
}
if (scanf("%*[^0123456789\n]%1[\n]", &s) == 1) break;