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

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

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

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

Q&A

解決済

3回答

1221閲覧

比べ方がわからない

dsjfklsajkd

総合スコア12

C

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

0グッド

0クリップ

投稿2016/09/17 06:32

###前提・実現したいこと

Rが入力されたらRはF、DはR、LはD、FはLの命令を行いたいのですがやり方がわかりません

###該当のソースコード
#include<string.h>
void main(void)
{
int x_s, y_s, d[10], kaisu, i, n, t;
char idou[10],houkou[10];
scanf("%d%d", &x_s, &y_s);
for (n = 0; n < 4; n++)
scanf("%d", d[i]);
scanf("%d",&kaisu);
for (i = 0; i < kaisu; i++)
{
scanf("%s%s", idou[i], houkou[i]);
}
for (i = 0; i < kaisu; i++)
{
if (strcmp(idou, "t") == 0)
{
if (strcmp(houkou, "F") == 0)
{

} if (strcmp(houkou, "R") == 0) { } if (strcmp(houkou, "L") == 0) { } if (strcmp(houkou, "B") == 0) { } } if (strcmp(idou, "m") == 0) { if (strcmp(houkou, "F") == 0) { x_s = x_s + d[i]; } if (strcmp(houkou, "R") == 0) { y_s = y_s + d[i]; } if (strcmp(houkou, "L") == 0) { y_s = y_s - d[i]; } if (strcmp(houkou, "B") == 0) { x_s = x_s - d[i]; } } }

}

###試したこと
代入以外思いつかなかったです

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

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

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

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

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

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

d_red

2016/09/17 08:56

コードは囲んでください。
guest

回答3

0

ベストアンサー

あえて既存のコードを利用して書きますが、
【イメージ的】にはこんなかんじなのかなあ?

C

1void main(void) { 2 int x_s, y_s, d[10], kaisu, i, n, t; 3 char idou[10],houkou[10],tmp[5]; 4 scanf("%d%d", &x_s, &y_s); 5 for (n = 0; n < 4; n++) scanf("%d", d[i]); 6 scanf("%d",&kaisu); 7 for (i = 0; i < kaisu; i++) { 8 scanf("%s%s", idou[i], houkou[i]); 9 } 10 for (i = 0; i < kaisu; i++) { 11 strcpy(tmp, idou); 12 strcat(tmp, houkou); 13 if (strcmp(tmp, "tR") == 0 || strcmp(tmp, "mF") == 0) { 14 x_s = x_s + d[i]; 15 } 16 if (strcmp(tmp, "tB") == 0 || strcmp(tmp, "mR") == 0) { 17 y_s = y_s + d[i]; 18 } 19 if (strcmp(tmp, "tF") == 0 || strcmp(tmp, "mL") == 0) { 20 y_s = y_s - d[i]; 21 } 22 if (strcmp(tmp, "tL") == 0 || strcmp(tmp, "mB") == 0) { 23 x_s = x_s - d[i]; 24 } 25 } 26}

投稿2016/09/17 12:45

takasima20

総合スコア7458

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

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

0

scanf()は何かと問題(下記)の多い関数です。1文字入力が必要ならfgets()で1行読み込んで先頭の文字を取り出すようにしましょう。また、数値が必要ならfgets()で読み込んでsscanf()を使いましょう。・・・これで、下記サイトで言われる改行文字の問題は回避できます。
scanfの「scanfの問題点と回避方法」を確認してみてください。

投稿2016/09/17 12:40

編集2016/09/17 12:45
cateye

総合スコア6851

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

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

0

Rが入力されたらRはF、DはR、LはD、FはL
の命令を行いたいのですがやり方がわかりません

C言語では「関数」を定義して呼び出すことで、
プロプラムを部品化、構造化、モジュール化できます。
Cでは必ず書く「main」も関数のひとつです。

しかし今回の場合、R→F、F→L、L→D、D→R、と循環してしまいますし、
そもそもどのような意図の処理なのか、よく分かりませんでした。

そこで、ご質問のコードに忠実ではありませんが、
関数呼び出しと制御構造のサンプルコードを掲載します。
何かの物体の移動経路を配列で指定し、位置を出力します。

「この部分を文字列で入力したい」みたいな細かいカスタマイズは、
ちょうど練習だと思って、サンプルを改造してみてください。
(なおscanfよりgets、みたいな論点を避けて入力をなくしました)

ここから改善の余地も色々あると思いますが、
凝りすぎないよう分かりやすくしました。

たとえば、「while (way[i] != STOP)」は、
「while (way[i])」と省略できますが、
制御を強調するため、あえて冗長に書きました。


C

1#include <stdio.h> 2 3int main(void) { 4 5 #define STOP 0 6 #define FRONT 1 7 #define BACK 2 8 #define LEFT 3 9 #define RIGHT 4 10 11 int way[] = {1,1,3,4,3,2,0}; 12 int x = 0,y = 0; 13 int i = 0; 14 15 while (way[i] != STOP) { 16 switch (way[i]) { 17 case FRONT: 18 y = move_F (y); 19 break; 20 21 case BACK: 22 y = move_B (y); 23 break; 24 25 case LEFT: 26 x = move_L (x); 27 break; 28 29 case RIGHT: 30 x = move_R (x); 31 break; 32 33 default: 34 break; 35 } 36 printf ("x=%d : y=%d \n", x, y); 37 i++; 38 } 39 return 0; 40} 41 42int move_F (int y) { 43 y++; 44 return y; 45} 46 47int move_B (int y) { 48 y--; 49 return y; 50} 51 52int move_L (int x) { 53 x--; 54 return x; 55} 56 57int move_R (int x) { 58 x++; 59 return x; 60}

投稿2016/09/17 12:01

編集2016/09/17 12:46
LLman

総合スコア5592

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問