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

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

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

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

C++

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

Q&A

1回答

2876閲覧

%uの扱い方が分からない

enegetic

総合スコア0

C

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

C++

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

0グッド

0クリップ

投稿2021/05/29 05:48

unsigned short intの型のxとyをキーボードから入力しその乗算を行うプログラムを作っています。
その中で、scanf("%u",&x);のところが
ーーーーーーーーーーーーーーーーーーーーーーーーーー
警告 C6328 サイズの不一致: 'unsigned short' が Param(2) として渡されました。'32 bit operand' が 'scanf' への呼び出しに必要です。これは、潜在的な重大なエラーを示します。scanf のような関数に対してこれが報告されると、バッファー アンダーランまたはオーバーランが発生する可能性があります。

警告 C6031 戻り値が無視されました: 'scanf'
ーーーーーーーーーーーーーーーーーーーーーーーーーー
のエラーがでました。このエラーはどうしたら解消されますか?

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

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

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

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

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

guest

回答1

0

%uは、unsigned int型の変数用なので、unsigned short int型には%huを使います。

また、scanfの返り値は必ずチェックしましょう。この場合は1かどうかの判断が必要です。

投稿2021/05/29 05:57

otn

総合スコア84798

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

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

enegetic

2021/05/29 06:47

回答ありがとうございます(o*。_。)oペコッ 実は、学校の課題でfor文の一部分が穴埋め形式になってそこを埋めて完成させるというプログラムなんです。そこでfor文を書く前に一度コンパイルしようとしたらこうなってしまいました。 ーーーーーーー #include<stdio.h> int main(void) { unsigned short int x, y, i; unsigned int z = 0; printf("x="); scanf("%u", &x); printf("y="); scanf("%u", &y); **for文** printf("%u×%u=%u\n", x, y, z); return 0; } ーーーーーーーーー これはfor文のとこだけを埋めて解決するだけではなく%huや返り血をチェックしなければいけませんか?
otn

2021/05/29 07:08

> これはfor文のとこだけを埋めて解決するだけではなく%huや返り血をチェックしなければいけませんか? 正しいプログラムにするためには、そうです。 少なくとも、%u のところは致命的ですね。
SaitoAtsushi

2021/05/29 07:21

C の整数型の正確な大きさ (ビット数) は言語仕様では規定されていません。 最低限度表現可能な大きさや他の型との関係については規定されていて、その範囲内で処理系は (実行環境の都合に合わせて) 選択できるのです。 つまり `unsigned int` と `unsigned short int` が同じ大きさとして定義されている可能性があり、その場合であれば問題は発生しないでしょう。 そして MS-DOS 時代 (16bit) あたりであれば `unsigned int` と `unsigned short int` が同じ大きさであることは普通のことでした。 言語仕様では必ずしもそうとは限らないものの実際にはあてにできていたのです。 しかし 32bit アーキテクチャ、 64bit アーキテクチャでは `unsigned int` と `unsigned short int` とが同じということはまずありません。 古い実行環境 (処理系) を前提にした古い資料が学校で使われているのはよく聞きます。 言語仕様の規定の範囲内で実際の事情が変わることもありますし、言語仕様そのものもたまに改定される (最新の改定は 2017 年です。 マイナーチェンジ程度ですが。) ので、古い資料が現状にそぐわないものになっていることもよくあります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問