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

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

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

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

Q&A

解決済

3回答

27485閲覧

printf内の空白の入れ方、ソースの訂正をお願します。

AzumiYuki

総合スコア14

C

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

0グッド

0クリップ

投稿2016/09/11 09:32

このソースの間違えを教えてください。
コンパイルエラーを感知するアプリを使ってエラーを直しましたがa.exeが動作を終了してしまいます。
printf内に余白を入れたくて"%s\n","----\t\t----"と使っているのですが間違っていますか?
間違っていたら空白の入れ方を教えてください。

#include<stdio.h> int main(void) { int a,b; int i = 0; int sum = 0; int s = sum * 0.8; printf("商品の個数を入力してください:"); scanf("%d", a); while(i < a){ printf("%s\n","商品&d\t\t値段:", ++i); scanf("%d", &b); sum += b; } printf("小計:%d円\n", sum); if(a < 5){ printf("消費税:%.0f円", (double)sum * 0.08); printf("合計:%.0f円\n", (double)sum * 1.08); } else(a > 5);{ printf("%s\n","20%off\t\t%.0f円off\n", (double)sum * 0.064); } printf("消費税:%.0f円\n", (double)s * 0.08); printf("合計:%.0f円\n", (double)s * 1.08); return 0; }

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

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

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

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

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

guest

回答3

0

こんにちは。

落ちているのはscanf("%d", a);が原因と思います。
C言語は常に値渡しですので、この文では変数aに入っている値がscanf()に渡されます。
"%d"で読み込んでいるので、変数aの値(初期化していないので不定値です)をint型のアドレスと解釈してそのアドレスへ書き込みしようとします。不定値なアドレスへの書き込みですので、不正メモリアクセスで落ちます。

printf("%s\n","商品&d\t\t値段:", ++i);printf("商品%d\t\t値段:\n", ++i);で良いかもしれません。(やりたいことがいまいち分からないので外していたらすいません。)

文字列に空白を入れるのは普通にやればよいです。例えば、"[ ]"みたいな感じです。\tはタブコードですので、タブが入ります。出力先がタブに対応していたら隙間が出来るはずです。タブに対応していない場合は空かないかもしれません。

投稿2016/09/11 12:08

Chironian

総合スコア23272

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

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

AzumiYuki

2016/09/12 00:25

丁寧にありがとうございました。
guest

0

ベストアンサー

とりあえず最初のscanfの時点が間違っています。詳しくは見ていません。

投稿2016/09/11 09:36

HogeAnimalLover

総合スコア4830

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

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

AzumiYuki

2016/09/11 11:11

くだらない質問ですいませんでした。ありがとうございます。 文字配列の中に空白を入れる方法を教えていただけませんか?
HogeAnimalLover

2016/09/11 11:52

C言語のコンパイル時には「ソースコード上の文字列において連続する空白や改行を一つにまとめる」といった処理が行われます。つまりソースコードの中で空白を直書きしてもダメです。 たとえば、以下の関数で文字列変数に空白を埋めていけます。動作未確認 void test(char* str, int len) { for(; len; str[--len] = ' '){ } }
AzumiYuki

2016/09/12 00:23

ありがとうございました。
guest

0

scanfに指定するのはアドレスです。
なので、こうしてみてください。

c

1scanf("%d", &a);

前にも同じ質問に答えたような・・・

投稿2016/09/12 00:28

ttyp03

総合スコア16996

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問