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

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

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

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

Q&A

解決済

4回答

14705閲覧

fgetsの中身を表示する時に改行をなくしたい

gyoruo

総合スコア61

C

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

0グッド

0クリップ

投稿2020/07/30 08:35

以下のようなプログラムでは、イメージ説明となってしまうのですが、あいうえおの後に改行を入れないで続けたいのですが、どうすればいいでしょうか?

C

1#include <stdio.h> 2#include <string.h> 3 4#define MAXDATA 256 5 6int main(void) { 7 char test[MAXDATA]; 8 char flag = 0; 9 10 while (flag == 0) { 11 puts("何か文字を入力して、エンターキーを押してください"); 12 printf(">>"); 13 // 半角全角10文字以内を想定 14 fgets(test,MAXDATA,stdin); 15 if (strlen(test) <= 31) { 16 printf("10文字以下で、%sと入力されました",test); 17 flag = 1; 18 } 19 } 20 21 return 0; 22} 23

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

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

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

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

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

guest

回答4

0

fgets() は正常に入力すれば改行文字も格納されていますから、それを消してしまえば良いだけです。
私のお気に入りは strchr() を使うことです。

C

1 char *p; // ポインタ変数を用意しておく 2 // 途中省略 3 fgets(test, MAXDATA, stdin); 4 p = strchr(test, '\n'); // 改行文字を探す 5 if (p) *p = '\0'; // 改行文字あれば、上書きして消す 6 if (strlen(test) // 以下省略

投稿2020/07/30 08:54

rubato6809

総合スコア1380

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

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

gyoruo

2020/07/30 10:04

ご回答ありがとうございます! そっか、fgetsはポインタが返されるんでしたよね!
guest

0

以下を追加。

C

1 char*p = strchr(test, '\n'); 2 if (p) { 3 *p = '\0'; 4 }

if (strlen(test) <= 31) {
前の質問から、UTF8で日本語入力のみかつ日本語は3バイトと決め打ちしているようですが、4バイトになる文字もあります。
UTF-8で4バイトになる文字

ロケールを正しく設定した上でmbstowcsで変換すると文字数を取得できます。
もしくは、不正なバイト列は含まれていないものとしてUTF-8 エンコード体系を参考に最上位ビットが立っていないものの数をカウント。

投稿2020/07/30 08:50

編集2020/07/30 08:58
SHOMI

総合スコア4079

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

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

gyoruo

2020/07/30 10:05

ご回答ありがとうございます! 4バイトの可能性は考えてませんでした、、、 もう少し自分でも調べてみます!
guest

0

ベストアンサー

以下のコードをfgetsの直後に挿入。

C

1int last = strlen(test) - 1; 2if (last >= 0 && test[last] == '\n') { 3 test[last] = '\0'; 4}

投稿2020/07/30 08:48

編集2020/07/30 08:48
Daregada

総合スコア11990

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

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

gyoruo

2020/07/30 10:06

ご回答ありがとうございます。 シンプルで一番わかりやすかったです!
guest

0

入力された文字列の最終の文字をチェックして、改行であれば¥0に置き換えてしまいましょう

投稿2020/07/30 08:44

y_waiwai

総合スコア87774

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

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

gyoruo

2020/07/30 08:47

早急なご回答ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問