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

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

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

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

Q&A

解決済

2回答

1568閲覧

斜めになっている"*"をhoue[20][30]のところだけ"y"に変えたいです。

退会済みユーザー

退会済みユーザー

総合スコア0

C

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

0グッド

0クリップ

投稿2017/01/12 04:34

編集2017/01/12 11:41

斜めになっている"*"をhoue[20][30]のところだけ"y"に変えたいです。
下のコードの結果は失敗で"y"が一列に複数で重複してしまっています。
お願いします。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

void routari(int,int);

char houe[30][80];

int main() {

int i; int zw; int vw; zw=5; vw=i; memset(&houe[0][0],' ',30*80); houe[20][50]='*'; fflush(stdout); for(i=0;i<30;i++) { routari(zw,vw); houe[20][50]='*'; fflush(stdout); printf("%80s\n",&houe[20][0]); printf("%80s\n",&houe[20][10]); printf("%80s\n",&houe[20][20]); printf("%80s\n",&houe[20][30]); printf("%80s\n",&houe[20][40]); printf("%80s\n",&houe[20][50]); } return 0;

}

void routari(int zw,int vw)
{

int g; houe[20][30]='y'; if(zw=vw) { int g; for(g=0;g<5;g++) { memset(&houe[0][0],' ',30*80); printf("%80s\n",&houe[20][30]); fflush(stdout); } }

}

追記
返信ありがとうございます
確かにわからないですね。

イメージ説明
の"*"の二つ目を"y"に変えたいんです。

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

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

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

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

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

toutou

2017/01/12 10:52

消した質問があると思います。それは残しておき追記で今回のをいれてください。編集で戻せます。
退会済みユーザー

退会済みユーザー

2017/01/12 11:42

了解しました!  すみません、追記のほうは方法が雑になってしまったかもしれません。
guest

回答2

0

ベストアンサー

こんにちは。

ごめん、ちょっと厳しいことを書きます。正直、何を言っているのか伝わってこないです。
「斜めになっている"*"」と言う記述は考えられる可能性が多すぎて何を意味するのか特定できません。
また、プログラムも意図が読み取れないくらい破綻してます。

プログラマの重要な資質の1つはコミュニケーション力です。仕様を理解するためには、相手の言っていることを理解し、かつ、曖昧な部分を明確にするため質問できるスキルが必要です。まずはここから始めませんか?
目標が分からないとアドバイスもできませんので、ここを避けることはできません。

恐らく画面に`'と'y'をなんらかの位置に表示したいのだろうと思います。その表示したい結果の画面を描いて見てはどうでしょうか?
「斜めになっている"
"」とは例えば下記のようなイメージでしょうか?
1行下がると1文字右に'*'を描くで合ってますか? それとも1行下がると2文字右でしょうか? そうではなくて逆向きで1行下がると1文字左とか?

text

1* 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10 * 11 * 12 * 13 * 14 * 15(後略)

ちなみに、teratailでは<code>ボタンを押して表示される'''と'''の間に書けば行頭のスペースも表示されるようになります。


【追記】
追加頂いた内容を少し補った上で、条件を満たす極簡単なプログラムを示します。

C

1#include<stdio.h> 2 3int main() 4{ 5 printf("%26s\n", "*"); 6 printf("%21s\n", "y"); 7 printf("%16s\n", "*"); 8 printf("%11s\n", "*"); 9 printf("%6s\n", "*"); 10 printf("%1s\n", "*"); 11 12 return 0; 13}

恐らくroueさんが求めるものではないと予想されます。次は制約条件を書いてみましょう。
制約条件が特にない場合はできるだけ簡単なプログラムというのは選択肢の一つなのです。これくらい小さい場合は、べた書きが一番簡単です。

投稿2017/01/12 05:43

編集2017/01/12 06:40
Chironian

総合スコア23272

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

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

退会済みユーザー

退会済みユーザー

2017/01/12 06:20

返信ありがとうございます。 確かに目標わからないですね。 上に画像をあげたのでみてもらえたらありがたいです。
Chironian

2017/01/12 06:35

了解。 まだ1行下がったとき、何文字左へ移動するのか不明ですね。 次に何か他にも条件があると思います。それらも記載しないと解にならない気がします。 取り敢えず、1行下がった時5文字左へ移動し、上から2行目を'y'にするプログラムを回答欄に追記します。これはroueさんが求めるものではないと思いますが、制約条件の記載がないので解にはなります。
退会済みユーザー

退会済みユーザー

2017/01/12 09:55

コード、ありがとうございます。 まったく考えていなかった記述方法でした。 少し解せないところもありますが、わからないことだらけなので とても参考になりました。 また教示してもらえるときはおねがいします。
Chironian

2017/01/12 10:06

あれ。特に条件はなかったのですね! なるほど。 解せないところは"%26s"の部分と思います。これは26文字の幅で右詰めで文字列を表示するという書式です。そこに1文字の"*"を表示しているため、25文字の空白と"*"が表示されます。 ↓等、たくさんのサイトに解説がありますので参考にされて下さい。 http://www.k-cube.co.jp/wakaba/server/format.html > また教示してもらえるときはおねがいします。 了解です。頑張って下さい。
guest

0

斜めになっている"*"って何ですか?全然理解できない…。
それは置いといて、ざっとコードを見たので問題点を書いておきます。

変数vwiを入れているが、iを初期化していないので不定値が入る。
またループ内でvwを使っているが、更新していないので不定値のまま。
printfで80バイトだけ出力したいのであれば、"%.80s\n" とする。
但し、要素数が[30][80]に対して、&houe[20][10]などとしているので、明らかに領域外にアクセスされる。
routari関数内のif文が==ではなく=になっている。
またif文ないのでループの意味も良くわからない。
またfflushをやたらと行っているが意図がわからない。

投稿2017/01/12 04:59

ttyp03

総合スコア16998

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

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

退会済みユーザー

退会済みユーザー

2017/01/12 05:52

返信ありがとうございます。 初心者なもので… 返答文にならって自分ができそうな範囲で変更してみたのですが、うまくいきませんでした。 追加するものは i=0; 変更するものは "%.80s\n" ”zw==vw” でOKですか? houe[20][10]はどうやったらアクセスできるのですか? fflushは理解しいていない状態で使っています。
ttyp03

2017/01/12 05:58 編集

回答に書いたものは、明らかにプログラムとしておかしい点を挙げただけですので、その点を修正しても質問者様がやりたいことが実現できるわけではありません。 他の回答者も言っていますが、まず目的を明確にしてください。 斜めになっている"*"って何ですか? 何をどうしたいのですか? それがわからないと修正方法を指摘することができません。 >houe[20][10] これは単に、 参照 if(houe[20][10]=='*') 代入 houe[20][10] = 'y'; で良いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問