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

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

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

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

3回答

1056閲覧

ターミナルの文字コードがおかしい

syoshinpanda

総合スコア0

C

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

1クリップ

投稿2022/05/02 06:48

編集2022/05/03 07:03

知恵袋にて質問したところ、うまく解決できなかったため、今回teratailに質問を投稿させていただきました
知恵袋https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14260940199

普段はvscodeのmingwを用いてコンパイルなどをしています。

C言語やJavaにて、
標準入力をした際にその内容を上手く取り込む?取得?することが出来なくなってしまいました。

scanf関数を使っても、文字が上手く読み取られないといった感じです。

今までは問題なく動作していました。
しかし、大学の課題でmecabという構文解析ツールを使うためにパソコンの文字コードをいじり始めてからおかしくなりました。

どのようにすれば、直すことが出来るでしょうか?!

いろいろ検索して、chcpコマンドを使って文字コードを変更したりしたのですが、全くうまくいきませんでした。

C言語

1#include <stdio.h> 2#include <stdlib.h> 3 4int main(void){ 5 char *string; 6 printf("文字入力\n"); 7 8 scanf("%s", string); 9 10 printf("入力したのは、\n%s",string); 11}

コードは以上のようなものをコンパイルし、実行しました。
文字コードを変えてコンパイルした画像が、以下の二つの画像になります。
ShiftJIS

UTF-8

EUC

vscodeだけでなく、コマンドプロンプトでも同じようなエラーが発生しています。

入力内容が、英語の場合は正常に入力できます
イメージ説明

tatsu99さんに提示して頂いた方法で実行した結果
イメージ説明

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

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

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

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

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

syoshinpanda

2022/05/02 07:52

1つ目の画像は上のようなコードをコンパイルと実行したものです。 2、3枚目の画像は、以下のようなコードをコンパイルして実行したものです。 #include <stdio.h> #include <stdlib.h> int main(void){ char *string; printf("文字入力せいよ!\n"); scanf("%s", string); printf("入力したのは、\n%s",string); }
thkana

2022/05/02 07:53

https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14260940199 https://teratail.com/help#posted-otherservice 対応してください。 「やむを得ず複数のサイトに質問を投稿された場合は、質問内容にマルチポストをする理由を書き、他のサイトの投稿へのリンクを貼ってください。 また、解決した際には必ずteratail及びすべての投稿に解決した旨と、どのように解決したかを記載してください。」 それはそれとして、 gccのコンパイルオプション --input-charsetおよび--exec-charsetを明示的に指定したらどうなりますか。 (ターミナルの方に見えるxml云々もなんだか気になるけれど) temp.exeってどういうプログラムですか?
thkana

2022/05/02 07:58

ここは「質問への追記・修正の依頼」欄なので、内容に関わることは質問を編集して追記してください。 それはそれとして、 最近はあまり聞かなくなったけどちょっと前はわりとあったEUCを試してみるとか。 コードは 20932 EUC-JP らしいです。
syoshinpanda

2022/05/02 08:27

質問の編集は早急に行います。 ご指摘ありがとうございます。
guest

回答3

0

パソコンの文字コードをいじり始めてからおかしくなりました。

どのような操作・手順によってパソコンの文字コードが現在のおかしい状態になったのかが不明なので元に戻す方法はしめせませんが
元の正常な状態の文字コードはcp936ではなくcp932であると思われます。

投稿2022/05/02 07:46

編集2022/05/02 07:54
can110

総合スコア38266

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

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

0

今まで、このような文字コード指定をせずともコンパイルから実行まで上手くいっていたのですが、その状態に戻すことはできないのでしょうか?

文字コードをシフトJISに変えれば、良いはずです。
1.現在の文字コードを確認する。
イメージ説明
画面下部のステータスバーにUTF-8が表示されているはずです。(赤線で囲んだ箇所)
2.文字コードを変更する。
表示された「UTF-8」の箇所をクリックします。
そうすると、文字コードの変更メニューが表示されます。
そこで、「エンコード付きで保存」を選択します。
イメージ説明
3.シフトJISを選択
Japnese(shift JIS)を選択します。
イメージ説明
4.文字コードの確認及びコンパイル&実行
①文字コードを確認します。(文字コードがShift JISになっていること)
②ターミナルを起動します。
③ページコードの確認
chcp と入力すると932が表示されることを確認します。
④コンパイル(以下を実行)
gcc temp1.c -o temp
⑤実行
./temp
漢字を入力し、それが表示されることを確認する。
イメージ説明

注意事項
ソース中に表、噂、などのダメ文字があるとコンパイルエラーになります。
ダメ文字については、下記URLを参照
ダメ文字
その場合は、以下のオプションをつけて、コンパイルしてください。
-finput-charset=cp932 -fexec-charset=cp932
実行環境のページコードは932です。

尚、ソースファイルの文字コードをUTF-8にした場合は、ダメ文字の有無にかかわらず、
コンパイルオプションに -fexec-charset=cp932
を付加すればOKです。(Bullさん。ご指摘ありがとうございました)
実行環境ページコードは932です。
以上。

投稿2022/05/03 01:39

編集2022/05/03 06:44
tatsu99

総合スコア5438

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

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

Bull

2022/05/03 06:13 編集

すでに議論が進んでいたようなので取り下げます。
tatsu99

2022/05/03 06:24

>Bullさん 表、噂とかの文字が入ると、Shift JISのままではだめですね。 ご指摘、ありがとうございました。 回答に注記を付加します。
syoshinpanda

2022/05/03 07:01

返信が遅れて申し訳ありません。 ご提示いただいた方法で試してみたのですが、新しく追加した画像のようになってしまいました。 今まではずっとUTF-8でコンパイルすることが出来ていたので、なぜ文字コードをシフトJISに変える必要があるのか未だ理解できていません。
tatsu99

2022/05/03 07:39

>今まではずっとUTF-8でコンパイルすることが出来ていたので、なぜ文字コードをシフトJISに変える必要があるのか未だ理解できていません。 UTF-8でも、コンパイル可能です。 そのあと、実行時のページコードは932でしたか、それとも65001でしたか。どちらでしょうか。 932なら、表示が正しくできなくて、 65001なら、表示はOKだが、取り込み(scanf)で正しく取り込めないはずです。 いままで、うまく行っていたというのは、scanfがなくて、表示だけのケースではないでしょうか。
tatsu99

2022/05/03 07:52

尚、ソースの文字コードUTF-8で、漢字の表示、取り込みを正しく行うには、 1.gcc temp1.c -fexec-charset=cp932 -o temp 2.ページコード 932で、./tempを実行 となります。
tatsu99

2022/05/03 08:58

>今まではずっとUTF-8でコンパイルすることが出来ていたので、なぜ文字コードをシフトJISに変える必要があるのか未だ理解できていません。 あなたからの要望で 「今まで、このような文字コード指定をせずともコンパイルから実行まで上手くいっていたのですが、その状態に戻すことはできないのでしょうか?」 ということなので、文字コードの指定をせずに、コンパイルから実行まで、おこなう方法として、 文字コードをシフトJISにする方法を提案しました。 しかしながら、あなたは、以前から文字コードはUTF-8を使用していたようですので、文字コードをシフトJISにする方法は撤回します。また、シフトJISにしても、期待した結果が得られていない為、(原因はわかりませんが)UTF-8を使用する方が良いと判断しました。 文字コードをUTF-8で行う場合は、1つ前のコメント「2022/05/03 16:52」のものを参考にしてください。
guest

0

プログラム自体に誤りがあります。
char *string;ではなく
char string[256];としてください。
ファイル名:temp1.c
文字コードはシフトJIS(CP932)です。
ページコードは932です。
コンパイル時、文字コードの指定を行います。
-finput-charset=cp932 -fexec-charset=cp932

C

1#include <stdio.h> 2#include <stdlib.h> 3 4int main(void){ 5 char string[256]; 6 printf("文字入力\n"); 7 8 scanf("%s", string); 9 10 printf("入力したのは、\n%s",string); 11} 12

実行結果

投稿2022/05/02 09:45

tatsu99

総合スコア5438

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

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

syoshinpanda

2022/05/02 10:01

コードを修正したうえで、-finput-charset=cp932 -fexec-charset=cp932と文字コードを指定した状態でコンパイルしたところ、以下のようなエラーが表示されてしまいました。 cc1.exe: error: failure to convert cp932 to UTF-8 今まで、このような文字コード指定をせずともコンパイルから実行まで上手くいっていたのですが、その状態に戻すことはできないのでしょうか?
tatsu99

2022/05/02 10:16

ソースの文字コードをシフトJIS(CP932)にしていますか? 文字コードを明示的にしていしないと、UTF-8になります。 ソースの文字コードをUTF-8にしていませんか。 >今まで、このような文字コード指定をせずともコンパイルから実行まで上手くいっていたのですが、その状態に戻すことはできないのでしょうか? たぶん、ソースの文字コードがUTF-8の状態で行ってきたと考えられます。 その場合、CHCP 65001でUTF-8の環境に切り替え可能ですが、 こちらで確認したところ、その環境でscanfは正しく動作しないようです。(正しく漢字を取り込めない) (printfは正しく漢字を表示します) 従って、正しく漢字を表示し、正しく漢字を取り込むのであれば、文字コードをシフトJISに統一しないと無理なようです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問