🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C

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

Q&A

解決済

5回答

4715閲覧

C言語 半角スペース区切りでn回出力して、最後の ABCDE の後には半角スペースは入れず、改行を入れたい。

Bafetto

総合スコア22

C

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

0グッド

0クリップ

投稿2021/02/28 02:59

編集2021/02/28 05:26

半角スペース区切りでn回出力して、最後の ABCDE の後には半角スペースは入れず、改行を入れたい。※”%d ”のように半角スペース以外の方法を知りたいです。

#include <stdio.h> int main(void) { int n = 0; int i = 0; char str[1000] = "ABCDE"; scanf("%d",&n); for (i = 0; i < n; i++) { if(i < n) { printf("%s",str); } else if(i == 0) //ヌル文字と一致したら改行のつもり。 { printf("%s\n",str); } } return 0; }
Main.c:14:20: warning: missing terminating '"' character [-Winvalid-pp-token] printf("%s,str); ^ Main.c:14:20: error: expected expression Main.c:23:1: error: expected '}' ^ Main.c:3:1: note: to match this '{' { ^ 1 warning and 2 errors generated.

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

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

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

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

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

tatsu99

2021/02/28 03:35

%bは初めてみました。どのような出力変換を行なうのでしょうか。
Bafetto

2021/02/28 05:05

バックスペースでした。スペースを入れたつもりでした。
guest

回答5

0

ベストアンサー

やりたいことに対しては,これ↓が最も素直な実装の形だろうと思う.
(それ以上の何かを求めるならば,そのことを明言すべきでは?)

C

1//n-1回 2for( int i=0; i<n-1; ++i )printf("%s ", str ); 3//最後の1回 4printf( "%s\n", str );

"%s "を用いるのがダメな理由がわかりませんが,どうしてもダメだというなら,そこの部分は他の方々の回答にあるような手段から気に入ったものを採用なされれば良いかと.

投稿2021/03/01 01:41

fana

総合スコア11985

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

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

0

n が 0以下の場合、改行だけ出してもいいのでしょうか?

C

1#include <stdio.h> // scanf, printf, putchar 2#include <string.h> // strlen 3 4int main(void) 5{ 6 char str[] = "ABCDE"; 7 int n = 0, len = strlen(str) + 1; 8 if (scanf("%d", &n) != 1) return 1; 9 if (n > 0) printf("%s", str); 10 for (int i = 1; i < n; i++) printf("%*s", len, str); 11 putchar('\n'); 12}

投稿2021/03/01 06:04

編集2021/03/01 06:05
kazuma-s

総合スコア8224

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

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

0

一応、if文を使う代わりに、三項演算子を使って以下のように書けます。

C

1for (i = 0; i < n; i++) { 2 printf("%s%c", str, (i < n - 1) ? ' ' : '\n'); 3}

しかし、今のあなたのレベルでは三項演算子の利用をお薦めしません。

"や}を閉じ忘れているのに(はじめのうちは)気がつかないようであれば、ifやprintfの書き方をしっかり身につける段階ですからね。

ちなみに、i == 0では、文字列末尾のヌル文字との比較になっていません。

投稿2021/02/28 05:46

編集2021/02/28 05:47
Daregada

総合スコア11990

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

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

0

printf("%s ",str);
にしたくないなら
printf("%s%c",str,32);
としてください。
32はスペースの文字コードです。

ところで、何故、printf("%s ",str);にしたくないのでしょうか。
むしろ、そのことに、興味があります。

投稿2021/02/28 05:32

tatsu99

総合スコア5493

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

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

0

Main.c:11:16: warning: missing terminating '"'

閉じる方の"がありません。
まずはそれをどーにかしましょう

投稿2021/02/28 03:01

編集2021/02/28 03:02
y_waiwai

総合スコア88038

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

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

Bafetto

2021/02/28 03:11

お恥ずかしい。”を入れた後のエラーです。 Main.c:11:20: warning: invalid conversion specifier 'b' [-Wformat-invalid-specifier] printf("%s%b",str); ~^ Main.c:16:2: error: expected '}' } ^ Main.c:2:15: note: to match this '{' int main(void){ ^ 1 warning and 1 error generated.
dodox86

2021/02/28 03:25

>@質問者さん 雑にコーディングせず、forやifのカッコのインデントを揃えてみてください。それで原因が分かります。
y_waiwai

2021/02/28 03:58

> Main.c:11:20: warning: invalid conversion specifier 'b' %bってのが意味不明、っておっしゃってますよ。 んであとのエラーはカッコの数があってないってことなんで、そこらへんよくみてみよう
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問