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

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

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

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

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Q&A

解決済

2回答

1780閲覧

C言語の文字コードの変換方法について

GG_Glow

総合スコア12

C

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

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

0グッド

0クリップ

投稿2020/01/21 12:48

編集2020/01/21 12:52

前提・実現したいこと

C言語の問題についてです。
読み込んだ半角数字を一つずつ表示するプログラムを作成、ただし、偶数番目の文字(0,2,4...)は文字コードで表示し、奇数番目の文字(1,3,5...)は文字そのもので表示し、文字列の最後の文字は表示しないとします。
例えば
taisaku と入力した場合 116 a 105 s 97 k
と表示されるようにしたいです。

発生している問題・エラーメッセージ

偶数の文字コードの表示の仕方と、偶数と帰趨をまとめて表示する方法が分からないです。
下記の通りソースコードは書いたのですがここから先が分かりません。

該当のソースコード

C

1#include <stdio.h> 2#include <math.h> 3#include <string.h> 4 5int main(void) 6{ 7 char str[100]; 8 int i; 9 10 printf("文字列を入れてください "); 11 gets_s(str, 100); 12 13 for (i = 0; i < strlen(str) - 1; i++) { 14 if (str[i] % 2 == 0) { 15 } 16 } 17 18 return 0; 19}

試したこと

文字コードの表示の仕方を調べたら ' 'で文字を囲えば可能だと聞きました。そこで下記のようにしたのですが、変な結果が出てしまいました。

C

1#include <stdio.h> 2#include <math.h> 3#include <string.h> 4 5int main(void) 6{ 7 char str[100]; 8 int i; 9 10 printf("文字列を入れてください "); 11 gets_s(str, 100); 12 13 for (i = 0; i < strlen(str) - 1; i++) { 14 if (str[i] % 2 == 0) { 15 str[i] == 'str'; 16 printf("%d", str[i]); 17 } 18 printf("%d", str[i]); 19 } 20 21 return 0; 22}

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

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

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

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

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

guest

回答2

0

最初に書かれたコードを生かす方向でコメントします。

偶数判定(つまり、変数iを2で割ったあまりがゼロの時)はうまくいっていますよね。
表示された文字は意図した内容ではないと思いますが、変なのは偶数の時だけのはずです。
修正すべきなのは、文字の表示方法です。

ならば、あとは奇数判定をするだけです。

愚直に書けば

C

1if(偶数判定) { 2 偶数の時の処理 3} 4 5if(奇数判定) { 6 奇数の時の処理 7}

となりますが、これはあまり褒められた書き方とは言えないでしょう。

変数iは、偶数でなければ奇数と分かっているわけですから、elseを使って書けますよね。

偶数の時は文字コード、奇数の時は文字を表示するわけですが、これはy_waiwaiさんの最初のコメントにヒントがありますので、それを参考にしてみてください。

投稿2020/01/21 13:26

TsukubaDepot

総合スコア5086

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

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

GG_Glow

2020/01/21 13:43

#include <stdio.h> #include <math.h> #include <string.h> int main(void) { char str[100]; int i,n; printf("文字列を入れてください "); gets_s(str, 100); for (i = 0; i < strlen(str) - 1; i++) { if (str[i] % 2 != 0) { printf("%c ", str[i]); } else { printf("%d ", str[i + 1]); } } return 0; } このような感じで偶数と奇数の処理を分けてみたのですがうまくいきません。。。 もう少しヒントをもらえると幸いです。
Y.H.

2020/01/21 13:53

> str[i] % 2 i番目が奇数か偶数かを求めたいのに なぜ「i番目の文字コード」が奇数か偶数かを求めてるの?
TsukubaDepot

2020/01/21 14:08

Y.H. さん、これは私の指摘が良くなかった(元のコードをよく読んでいなかった)のが根本的な原因ですね。すみません。 元のコードじゃ奇数偶数「番目」の判定になってませんね。 文字列は数値だけで構成されていると誤解していました。 onoshiさん: 適切な指摘でなくてすみません。 やりたいことは、文字列の偶数番目と奇数番目で行う処理を分けたいわけですよね。 実際の処理では、配列に入っているi番目の文字に対して処理を行いたいわけですよね。 であれば、どの変数が偶数か奇数かを判断すれば良いか、わかりますか?
guest

0

ベストアンサー

printf("%c%d",str[i],str[i+1])

ループは自分で考えよう

投稿2020/01/21 12:52

y_waiwai

総合スコア87719

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

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

GG_Glow

2020/01/21 13:09

ループの仕方はわかって一文字ずつ表示されるようになったんですが、最初の文字以外文字コードと文字そのもので表示されてしまいます。 taisakuと打ったらt 97a 105i 115s 97a 107k 117と表示されます。
y_waiwai

2020/01/21 13:12

そのコードを提示してみてください
GG_Glow

2020/01/21 13:20

#include <stdio.h> #include <math.h> #include <string.h> int main(void) { char str[100]; int i,n; printf("文字列を入れてください "); gets_s(str, 100); n = strlen(str); for (i = 0; i < n - 1; i++) { if (str[i] % 2 == 0) { } printf("%c %d", str[i], str[i + 1]); } return 0; }
y_waiwai

2020/01/21 13:56

for (i = 0; i < n - 1; i+=2) { printf("%c %d", str[i], str[i + 1]); } にしてみよう
GG_Glow

2020/01/21 14:23

#include <stdio.h> #include <math.h> #include <string.h> int main(void) { char str[100]; int i,n; printf("文字列を入れてください "); gets_s(str, 100); n = strlen(str); for (i = 0; i < n - 1; i += 2) { printf("%d %c ", str[i], str[i+1]); } return 0; } この形にすれば偶数が文字コードになり、奇数がそのままの数字になりました。 長くなりましたがありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問