- ベストアンサー
c言語
c言語の問題なんですが 氏名を姓と名に半角空けて1列に入力し、姓と名の文字数を数えるプログラムを書いてみましたがうまく走りません原因がわからないので誰か教えてください。ちなみに、書いたプログラムは、 #include <stdio.h> void mojisu(char z[] ); int main() { char z[30]; printf("氏名を英語で入力\n"); scanf("%s\n",&z); mojisu(z); } void mojisu(char z[] ) { int sei,mei, b; for(b =0,sei=0; z[b]==' '; b++); { sei+=1; } printf("姓の文字数は%d\n",sei); for(b =sei+1,mei=0 ; z[b]=='\0'; b++); { mei+=1; } printf("名の文字数は%d\n", mei); }
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
No1です 追加です。いろいろ間違いがみつかりました。。。 scanfですが、文字を格納する変数はポインタを指定する必要があります。 この場合&zとやってしまうとポインタのポインタを指定したことになります。 ここは単にzでいいです。 また#2さんが回答されているように空白が文字の切目と されるため、二つの文字列変数を用意する必要があります。 forループの繰り返しの条件がおかしいと思います。 forは「条件を満している限り繰り返す」ので 「z[b]==' '」や「z[b]=='\0'」ではなく「z[b]!=' '」や「z[b]!='\0'」とする必要があります。 これはプログラムをみたほうが分かりやすいと思います。 #include <stdio.h> void mojisu(char z1[], char z2[]); int main() { char z1[30], z2[30]; printf("氏名を英語で入力\n"); scanf("%s %s",z1, z2); mojisu(z1, z2); } void mojisu(char z1[], char z2[]) { int b; for(b =0; z1[b]!='\0'; b++); printf("姓の文字数は%d\n",b); for(b =0; z2[b]!='\0'; b++); printf("名の文字数は%d\n", b); }
その他の回答 (4)
皆さんおっしゃるように,「姓」と「名」にわけて読み込むとして, 文字列の長さを測るのは strlen 関数を使うといいですよ。 #include <string.h> char a[] = "12345"; printf("%d\n", strlen(a)); # 使っちゃいかんのかな?
- asdfldfnjsvfs
- ベストアンサー率42% (75/178)
配列を2つ(姓、名それぞれ)用意すれば簡単に出せるんではないでしょうか。
- hitomit
- ベストアンサー率16% (3/18)
scanf関数では空白を文字列の終わりとみているので、 "姓 名"とすると姓しか読めません。
- winterofmeei
- ベストアンサー率22% (20/88)
for()のあとにセミコロンがあるのはなぜでしょうか? 2つのfor()のあとにあるセミコロンを削除してから実行してみてください。