ページ 1 / 1
C言語のプログラムについて
Posted: 2013年7月10日(水) 19:42
by 獅音
またまた失礼します。
C言語の課題で、文字列の使い方を理解するプログラムを作成するのですが、
コンパイルしたらエラーが起きて困っています。
教えてもらえないでしょうか?よろしくお願いします。
○キーボードから氏名をローマ字で入力すると、イニシャルにして表示するプログラムを作成しなさい。
なお、キーボードから入力した氏名を格納する配列は、苗字:sei,名前は、:meiとして、入力できる最大文字数は、いずれも19文字とする。
イニシャル用の変数は、文字型配列initial[4]として宣言し、initial[0]=mei[0];などのように、1文字ずつ割り当てていく方法で行うこと。
【実行結果の例】
苗字(19文字以内):○○
名前(19文字以内):○○
○○ ○○さんのイニシャルは,○.○です。
コード:
#include <stdio.h>
int main( void )
{
char sei[19];
char mei[19];
char initial[4];
printf( "苗字(19文字以内):" ); gets( sei );
printf( "名前(19文字以内):" ); gets( mei );
initial[0] = search_initial( mei );
initial[1] = '.';
initial[2] = search_initial( sei );
initial[3] = '\0';
printf( "%sさんのイニシャルは,%sです.\n", initial );
return 0;
}
char search_initial( const char *psz )
{
while( *psz ) {
if( !isspace( *psz ) ) return toupper( *psz );
++psz;
}
return
}
よろしくお願いします。
Re: C言語のプログラムについて
Posted: 2013年7月10日(水) 20:09
by non
4行目 char sei[19];
5行目 char mei[19];
19文字まで入力されるなら配列は20必要です。
11行 initial[0] = search_initial( mei );
serch_initialの関数で何をしたいのでしょうか?
先頭にスペースがあったら読み飛ばし、最初に出た文字を大文字にしたいということなのでしょうか?
関数については後術。
16行 printf( "%sさんのイニシャルは,%sです.\n", initial );
seiやmeiも表示する必要があります。変数の数と%sの数を一致させましょう
コード:
char search_initial( const char *psz )
{
while( *psz ) {
if( !isspace( *psz ) ) return toupper( *psz );
++psz;
}
return
}
もちろん、このままでは、returnの後に何もないのでエラーですが、考え方として、
whileをスペースの間繰り返し、スペース以外になったら、whileから抜けて、大文字に変換してreturnする方がいいでしょう。
>コンパイルしたらエラーが起きて困っています。
ヘッダーファイルがないとかでしょうか?
Re: C言語のプログラムについて
Posted: 2013年7月10日(水) 21:57
by 獅音
もっと簡単にプログラムをさくせいしたのですが、エラーが起きてしまいます。
コード:
#include <stdio.h>
int main(void)
{
char sei[20],mei[20],initial[4];
printf("苗字(19文字以内):");
scanf("%s",sei);
printf("名前(19文字以内):");
scanf("%s",mei);
printf( "\n%sさんのイニシャルは,%sです.\n",);
return 0;
}
16行目を○○ ○○さんのイニシャルは,○.○です。と表示させるにはどう入力すればいいでしょうか?
Re: C言語のプログラムについて
Posted: 2013年7月10日(水) 22:05
by みけCAT
イニシャルというのは、苗字と名前の最初の1文字ですね。
苗字と名前をローマ字で入力してくれれば、最初の1文字を取るだけです。
printfで1文字表示するには、%cを使用します。
Re: C言語のプログラムについて
Posted: 2013年7月10日(水) 22:09
by softya(ソフト屋)
printfの%s書式は、どこかの変数からか文字列を持ってこないと表示できません。
printf( "\n%sさんのイニシャルは,%sです.\n",);
は%sが2回出てくるので対応する変数を2つ指定する必要があります。
見ての通り変数が指定されていないので、コンパイラは対応がとれていないエラー文として判定します。
あと,で終わっているのも文法違反です。
これと同じ事をnonさんは既に書いているんですが、獅音さんは見逃してしまった様です。
それ以外にはイニシャルの処理は別の問題なので、とりあえず名前と苗字表示を終わらせましょうか。
【補足】
あっと思い出しました。この質問の方ですね。こっちも終わらせてもらえると嬉しいのですが。
「C言語のプログラムについて • C言語交流フォーラム ~ mixC++ ~」
http://dixq.net/forum/viewtopic.php?f=3&t=13320
過去の質問からして、常に参照できるように手元にC言語入門の書籍を用意しておいていただきたいんです。
この質問を見る限り、やはりC言語の文法の基本的なことを見落としていると思います。
Re: C言語のプログラムについて
Posted: 2013年7月16日(火) 21:55
by 獅音
長らく放置してしまいました。
前回のは、あれであっていたはずです。
貼るプログラム間違えてしまいましたかね^^;
手元にある教材は、インフ●テック・サーブさんから出版されている、はじめてのアルゴリズム、Cプログラミングはあるので、あとはプログラムを作成するうえで、1つ1つの意味を理解していきたいと思います。
もうすぐテストもあるので、分からないところも聞きにきてもよろしいでしょうか?
すみませんが、よろしくお願いします><
そして、プログラムができたので、ご指摘ありがとうございました。
また勉強して頑張ります。
コード:
#include <stdio.h>
int main(void)
{
char sei[20],mei[20],initial[4];
printf("苗字(19文字以内):");
scanf("%s",sei)
printf("\n");
printf("名前(19文字以内):");
scanf("%s",mei);
initial[0]=mei[0];
initial[1]='.';
initial[2]=sei[0];
initial[3]='\0';
printf("\n%s %sさんのイニシャルは、%sです.\n",sei,mei,initial);
return 0;
}
Re: C言語のプログラムについて
Posted: 2013年7月16日(火) 21:55
by 獅音
コードが何で横になるのでしょうか・・・?
Re: C言語のプログラムについて
Posted: 2013年7月16日(火) 21:58
by softya(ソフト屋)
獅音 さんが書きました:コードが何で横になるのでしょうか・・・?
IE10だからです。互換モードをご利用ください。
※ 世界的には主流ではないIE10なので、どうしても対応が後回しになりますね。
【追記】
インデントにもご注意ください。あっちも正しいコードを張ってくださいね。
【追記の追記】
某受験事件でも有名ですがテスト中の質問にはお答え出来ませんが、テスト前の復習の質問はどんどんご質問ください。
Re: C言語のプログラムについて
Posted: 2013年7月16日(火) 22:11
by 獅音
以後、気を付けます><
インデントもやっていなかったので、気を付けたいと思います。
テスト中の質問はしませんので^^;
管理人様のご迷惑にならない範囲で質問させていただくので、よろしくお願いします。
コードの貼り付けは[]の中にcode=IE10と入力すればいいのでしょうか?
Re: C言語のプログラムについて
Posted: 2013年7月16日(火) 22:14
by softya(ソフト屋)
ブラウザのIE10の設定を変えてください。
「初心者でもわかる! IE で互換表示 (IE10/IE9)」
http://support.microsoft.com/kb/2618122/ja
「互換表示に切り替える方法を教えてほしい。(Internet Explorer 10) | 会員サポート > Q&A(よくあるご質問) : @nifty」
http://qa.nifty.com/cs/catalog/faq_nqa/qid_14659/1.htm
Re: C言語のプログラムについて
Posted: 2013年7月16日(火) 22:38
by 獅音
管理人さん
すみません、わざわざQAを見つけていただいて^^;
ご丁寧にありがとうございました。