C言語初心者です。
printfで%sという書式があることを知りました。
入力した登場人物を文章中に入れてみたいと思ったのですが、
下記のソースではコンパイルエラーが出てしまいます。
間違ってる所を教えて欲しいです。それと大変図々しいのですが
組直して頂けると尚嬉しいと感じてる次第であります。
#include <stdio.h>
int main(void)
{
int p1,p2,yn;
puts;("当てはまる身近な人物の名前を入力してください。");
printf("男の人:"); scanf("%s", & p1);
printf("女の人:"); scanf("%s" ,& p2);
puts;("人物を入力できましたか?");
printf("y/n"); scanf("%s", &yn);
if (yn == y){
printf("僕は%sです。男だよ。",p1);
printf("そして私は%sです。女だよ。",p2);
}
return 0;
}
どうかこんな初心者のワタクシメに中級者、上級者様の有り難い回答を
どうぞ宜しくお願い致します。
No.1
- 回答日時:
ツッコミどころ満載ですな。
>puts;("当てはまる身近な人物の名前を入力してください。");
puts直後のセミコロンは要りません。
>scanf("%s", & p1);
>printf("僕は%sです。男だよ。",p1);
%sで必要なのはchar*であって、int型のアドレスではありません。
char*だからといって、
char *name;
scanf("%s", &name);
でいいわけでもありませんが。
>if (yn == y){
唐突に出て来た『変数y』が未宣言です。
まぁ何がやりたいのかは判りますが、手段が正しくありません。
全体的に…入門書をもう一度読まれる事をお勧めします。
# マラソンしようと思うけどハイハイすらできていない…って感じですかね。
No.2
- 回答日時:
> 下記のソースではコンパイルエラーが出てしまいます。
こういうのが一番ダメです。
コンパイルエラーは、一番簡単なエラーです。
何が間違っているかのヒントを教えてくれています。
それを読まずに、解決などできません。
これは、上級者でも同じです。上級者だって、エラーが出れば、そのメッセージを読んで修正します。
プロでもやってることを、素人がやらなかったらそりゃ解決なんかできません。
たとえば、GCCでコンパイルすると、次のようなエラーメッセージが出ます。
XXXX.c:16:11: error: 'y' undeclared (first use in this function)
これは
「ファイルXXXX.cの16行目11文字目にエラー」
その内容は「 y (という変数か関数かなんか)が定義されていない(undeclared)」
ということです。WindowsでVisual Studio を使っているなら、
「error C2065: 'y' : 定義されていない識別子です。」等と出ているのでは。
https://msdn.microsoft.com/ja-jp/library/ewcf000 …
確かに、 y という変数は定義されていません。
では、 int y ; を追加すれば解決か、というとそうではありません。
たしかに、ここでのエラーは無くなります。
ですが、本来やりたいことでは無いので、プログラムは期待通りの動作はしません。
「文法は正しいが、やり方が間違っている」というのは、その間違いを探すのがとても困難です。
エラーになる方が何倍も楽です。
「この場所で何をするべきか」を考え、それに沿った記述に直しましょう。
ここでは、
上で入力した文字列 yn が 「文字列 "y"」と等しいか
を判断したいのでは?
""でくくらないと文字列にはなりません。
また、C言語では == を使って文字列を比較しても、「文字列の内容が同じ」とはなりません。
そもそも
int p1,p2,yn;
とint型で宣言した変数の文字列を入力して、printfで出力しようとしています。
C言語の仕様上、scanf,printfでは「エラー」にはなりません。
ですが、致命的な大間違いです。
思うに、本当にC言語を始めたばかりで、「文字列」については何も知らないように思います。
あせらずに、まずは参考書等の「文字列」についての内容を理解しましょう。
なお、他に次の間違いがあります
・puts の使い方が間違っている
・ ; が「全角」になっている箇所がある
文法の間違えを探すだけでは本来の解決にはならないのですね。お察しの通り文字列の知識がほとんどないです。もう少し文字列について調べ理想のソースができるようにしていきます。訂正とアドバイスありがとうございます!
No.3ベストアンサー
- 回答日時:
以下のようにしてください。
-----------------------------------
#include <stdio.h>
int main(void)
{
//int p1,p2,yn;
char p1[256]; //追加
char p2[256]; //追加
char yn[256]; //追加
puts;("当てはまる身近な人物の名前を入力してください。");
printf("男の人:"); scanf("%s", p1); //修正
printf("女の人:"); scanf("%s" ,p2); //修正
puts;("人物を入力できましたか?");
printf("y/n"); scanf("%s", yn); //修正
//if (yn == y){
if (strcmp(yn,"y")==0){ //修正
printf("僕は%sです。男だよ。",p1); //修正 全角の;を半角の;にする
printf("そして私は%sです。女だよ。",p2); //修正 全角の;を半角の;にする
}
return 0;
}
------------------------------------------------------
以下、実行結果です。
男の人:太郎
女の人:花子
y/ny
僕は太郎です。男だよ。そして私は花子です。女だよ。
--------------------------------------------------------
変更箇所は、//追加 //修正のようにコメントをいれています。
何故、そうなるか、わからないときは、再度、質問してください。
このプログラムの動作を確認するときは、提示されたソースをコピー&ペースト
して、それをコンパイルしてください。
(手打ちで入力すると、打ち間違いが発生し、エラーになる可能性があります)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 割られる整数と割る整数を受け取って、商と余りを出力す 3 2022/07/05 10:23
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# C言語(構造体) 3 2022/07/05 20:08
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# C言語階乗の総和を求める 2 2023/03/04 23:31
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# c言語でユーザ関数を利用して複素数のべき乗と絶対値の数列を計算するプログラムが作りたいです。 3 2023/01/29 22:13
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
error C2143: 構文エラー : ';'...
-
hit&bolwのプログラミングがで...
-
困ってます!Cプログラミングに...
-
万年カレンダーのC言語プログラ...
-
C言語での、年複利の計算方法...
-
(C言語)めちゃくちゃな値にな...
-
ヘロンの公式を作ったプルグラ...
-
ブラックジャック
-
コマンドプロンプトがすぐ消える
-
勝率をプログラムに
-
平均合計偏差値標準偏差の出し方
-
C言語
-
関数について
-
printf()文の書式
-
C言語で四則演算を使って10を作...
-
if文がコンパイルエラーを起こ...
-
scanfで正しい値を入力できない
-
DOS画面でテキストカーソルの位...
-
C言語で、「自然数nを入力し、n...
-
2進数の乗算と除算
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
10個出力で改行したいのですが...
-
既約分数の表示プログラム
-
printf で二進表示を行いたい。
-
8人分のテストの点数を入力し、...
-
printf( " %2d", p * q );
-
strcmp
-
CTRL+Dでループを抜けるには
-
4の倍数を論理演算で表す。。
-
%P と %X の違い
-
【C言語教えてください】sin波...
-
c言語でAからZまでを表示する...
-
cshの文字列操作(0埋め)
-
万年カレンダーのC言語プログラ...
-
コマンドラインに出力した文字...
-
scanfに文字が入力されたときに...
-
コンパイルエラーについて
-
ホームページをC言語で作りたい...
-
改行について 1行に何個かづ...
-
台形の面積を求めるプログラム
-
なぜgccはstdio.hをインクルー...
おすすめ情報