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

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

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

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

Q&A

解決済

2回答

1518閲覧

C言語で関数の作り方

takemark20

総合スコア9

C

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

0グッド

0クリップ

投稿2018/07/14 10:01

前提・実現したいこと

C言語で、入力した文字列中にアルファベット以外の文字が含まれていた時、その文字は「?」として表示させる
関数のプログラムを作っています。

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

プログラム自体はできたのですが、関数化できません。
関数をどう作ったらいいのかわかりません。
eimojiという関数を作るとして、

C

1int eimoji(); 2int main() 3{ 4} 5 6int eimoji() 7{ 8}

関数()の中をどう書いていけばいいのか分かりません。

該当のソースコード

C

1#include<stdio.h> 2#include<string.h> 3int main() 4{ 5 int i, n; 6 char moji[256]; 7 printf("文字列を入力してください。\n"); 8 scanf("%s", moji); 9 n = strlen(moji); 10 for(i=0; i<n; i++){ 11 if((moji[i]>='a' && moji[i]<='z') || (moji[i]>='A' && moji[i]<='Z')){ 12 printf("%c", moji[i]); 13 }else printf("?"); 14 } 15 printf("\n"); 16 return 0; 17} 18

試したこと

C

1 n = strlen(moji); 2 for(i=0; i<n; i++){ 3 if((moji[i]>='a' && moji[i]<='z') || (moji[i]>='A' && moji[i]<='Z')){ 4 printf("%c", moji[i]); 5 }else printf("?"); 6 } 7 printf("\n");

この部分を関数にしたらいいのはなんとなく分かるんですが、
関数自体慣れていないので、どのようにしたらいいのか分からず困っています。

簡単ものなら出来るのですが、初心者なので少し複雑になるだけで出来なくなります。

ご助言お願いします。

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

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

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

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

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

guest

回答2

0

該当の部分をそのまま、 int eimoji() の {} の中に入れるだけでは?

ただ、そうすると、n と moji を eimoji関数の中では不明になるので、引数として渡す。
--> eimoji(int n, char moji[])
呼び出す方も同様に、
--> eimoji(n, moji);
のようにする、、。

これ以上は、Cの入門書とかで確認された方が、良いかと。

投稿2018/07/14 10:09

pepperleaf

総合スコア6383

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

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

0

ベストアンサー

関数の書き方がほとんど全く分からないということでしょうか。

とりあえず、『文字列を受け取って、表示』するだけの関数を書いてみてください。
そうすればシグネチャが完成しますから、後は中身を書き換えれば良いだけです。

投稿2018/07/14 10:09

編集2018/07/14 10:16
LouiS0616

総合スコア35658

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

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

takemark20

2018/07/14 14:53

ありがとうございます。 なんとか出来そうですが、関数部のreturnの戻り値はどうしたらいいのでしょうか?
LouiS0616

2018/07/14 14:55

戻り値が必要ない場合は返り値の型をvoidにすれば良いです。
takemark20

2018/07/14 15:19

ありがとうございます。 こうでしょうか? #include<stdio.h> #include<string.h> void eimoji(int, char); int main() { int i, n; char m[256]; printf("文字列を入力してください。\n"); scanf("%s", m); eimoji(n, m[256]); return 0; } void eimoji(int nn, char mm[]) { int ii; nn = strlen(mm); for(ii=0; ii<nn; ii++){ if((mm[ii]>='a' && mm[ii]<='z') || (mm[ii]>='A' && mm[ii]<='Z')){ printf("%c", mm[ii]); }else printf("?"); } printf("\n"); } しかしエラーが出てしまいます。 test.c:16:6: error: conflicting types for 'eimoji' void eimoji(int nn, char mm[]) ^ test.c:4:6: note: previous declaration of 'eimoji' was here void eimoji(int, char); 調べてみてエラーの意味は分かったのですが、問題ないように思われます。どういうことでしょうか?
LouiS0616

2018/07/14 15:22

プロトタイプ宣言に問題があります。char型とchar[]型は異なる型です。
LouiS0616

2018/07/14 15:23

ついでに。 文字列長を関数内で計算するなら、引数nnを用意する必要はありません。
takemark20

2018/07/14 15:56

すみません...どうしても分かりません。 宣言部分が違っているんですよね?
LouiS0616

2018/07/14 15:59 編集

はい。 void eimoji(int, char); ではなく void eimoji(int, char[]); にしないといけません。 あと m の渡し方も変です。 eimoji(n, m[256]) ではなく eimoji(n, m) で呼び出してください。
takemark20

2018/07/14 16:05

試したんですがそれでもエラーになってしまいます。 test.c:11:9: warning: passing argument 1 of 'eimoji' makes pointer from integer without a cast [-Wint-conversion] eimoji(m[256]); ^ test.c:4:6: note: expected 'char *' but argument is of type 'char' void eimoji(char[]); と出てしまいます。 nnはアドバイス通り消しました。
takemark20

2018/07/14 16:07

ありがとうございます。 しっかり動きました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問