質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

4回答

1049閲覧

scanf関数の使い方

big000

総合スコア18

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2019/05/26 14:18

編集2019/05/26 15:50

scanf関数を使って、数値を入力し、別のxxx(my_hand)という変数に代入したい
「ファイル分割」も行いたいので、別ファイルのmain関数内のxxx(my_hand)に数値を代入するイメージです。

この際、Source.cファイルにてscanfの戻り値が無視されているという警告がでている。

プログラムにエラーはないですが、実行してもmainファイルのprintf出力ができない。。
環境は、Visual studio commyunity 2019を使用しています。

/*Header.hというfile*/ #ifndef HEAD #define HEAD int own(); #endif HEAD /*Source.cというfile*/ #include "Header.h" #include<stdio.h> int own(void) { int abc = 0; printf("入力してください\nグー:1 チョキ:2 パー:3\n"); scanf("%d\n", &abc); return abc; }
/*mainファイル*/ #include<stdio.h> #include"Header.h" int main(void) { int my_hand = 0; my_hand=own(); printf("%d\n", my_hand);   return 0; }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pepperleaf

2019/05/26 15:25

コンパイル環境は何でしょうか? エラーメッセージは、出力されたままを書きましょう。 (もっとも、その文面で検索すると結構、答えがあるのですが) 上記の質問内容とコードでは、問題が再現できません。 "xxx=scanf()" でエラーとなりそうですが、エラー種類は違う。
guest

回答4

0

ベストアンサー

scanfは、入力できた変数の数を返しますので、返り値のチェックが必須です。
scanf("%d\n", &abc);であれば、
返り値=1 → 整数が入力できた
返り値=0 → 整数でないものが入力された
返り値=-1 → 入力がEOFになった
の3パターンです。

C

1#include <stdio.h> 2int own(void) { 3 int abc; 4 printf("入力してください\nグー:1 チョキ:2 パー:3\n"); 5 if(scanf("%d\n", &abc)!=1){ 6 printf("入力エラー\n"); 7 return 0; 8 } 9 return abc; 10}

C

1#include <stdio.h> 2int own(void); 3 4int main(void){ 5 int xxx; 6 xxx=own(); 7 printf("%d\n",xxx); 8}

投稿2019/05/26 15:51

otn

総合スコア84555

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

scanf("%d\n", &abc);

ここ、scanf("%d", &abc) とすると、普通に、結果が得られました。
元のコードで、入力を 2行入れると、最初のデータが 入る。 多分、'\n'で、次の Enter待ちかもしれない。
詳しい人から、突っ込みありそうですが、参考として。 (もう夜も遅いので)

投稿2019/05/26 15:52

pepperleaf

総合スコア6383

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

xxx=scanf();

もしかして

xxx = own();

ってやりたかったんじゃない?

投稿2019/05/26 15:15

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

big000

2019/05/26 15:23

そうでした
guest

0

後者のコードは間違ってます。scanfに引数がありません。コンパイルエラーになるはずです。
scanf関数は戻り値を返しますが、それを使用しない場合は無視して構いません。
警告は無視して大丈夫です。

投稿2019/05/26 14:44

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

big000

2019/05/26 14:55

引数を設定するのは、 xxx=scanf(abc); ということですか? 基礎の概念があまりわかっていません
y_waiwai

2019/05/26 14:58

わかっていないなら勉強しましょう 「C言語 scanf」でぐぐればそれについての記事がいろいろ出てきますんで、一通り読んで見ればどうでしょうか
pepperleaf

2019/05/26 15:26

#include <stdio.h> が無いと、コンパイルエラーにはならなかった。(動くとは思えないが)
y_waiwai

2019/05/26 23:29

そのえーかげんなところがCの欠点であり、また魅力でもあったりするんですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問