みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

プログラミングについて

初めまして、初めて質問させていただきます。
いきなりですが最近プログラミングにはまり、独学でCプロをやり始めた物なのですが、以下のようなプログラムをCプロで打ち込んでコンパイルしたところ
int main(void)
{

int i,j,height,length;
scanf("%d",&height);
if(height % 2 ==0)
{
putchar("invalid");
{
return 0;
}
}
scanf("%d",&length);
if(height>=1 && height<=100)
for(i=1;i<=height;i++){
for(j=1;j<=length;j++)
if(i ==1 || i==height)
{
putchar('e');
}
else if( i !=height/2+1){
putchar('e');
for(j=1;j<length;j++)
putchar('.');
}
else{
for(j=1;j<=length/2+1;j++)
putchar('e');
for(j=length/2+1;j<length;j++)
putchar('.');
}
putchar('\n');
}
return(0);
}
―――――――――――

Main.c:5:1: warning: implicitly declaring library function 'scanf' with type 'int (const char *restrict, ...)' [-Wimplicit-function-declaration]
scanf("%d",&height);
^
Main.c:5:1: note: include the header <stdio.h> or explicitly provide a declaration for 'scanf'
Main.c:8:5: warning: implicit declaration of function 'putchar' is invalid in C99 [-Wimplicit-function-declaration]
putchar("invalid");
^
2 warnings generated.
―――――――――
と上のようなエラー内容が出てしまい、丸一日自分で模索しても何故こんなエラーが出て来てしまうのか分からない為、教えて頂けるとありがたいです。

投稿日時 - 2017-08-18 15:31:07

QNo.9364434

困ってます

質問者が選んだベストアンサー

まず、

#1. 入出力が絡む際はファイル先頭に必ず

#include <stdio.h>

と記入して下さい。

仕様上だと「C言語本体」だと何も出来ないに等しいです。入力・出力をさせる場合(に限らないですが)、「適したライブラリ(ヘッダ)」を読み込ませる、と言うのがC言語の設計です。
コンパイラによっては #include <stdio.h> しなくても入力・出力をしてくれるブツもありますが、「正しい書き方」だと必ず #include <stdio.h> しないとダメです。

#2. 二番目のエラーは8行目の

putchar("invalid");

が引っかかっています。
putcharは「文字」を出力しますが、引数が受け取ってる"invalid"は文字列です。ここが二番目のエラーの原因でしょう。
文字列を出力する際は

puts("invalid");

が適切だと思います。

投稿日時 - 2017-08-18 17:34:42

お礼

言われた通りputsにしたら出来ました。まだまだ自分のCプロの理解力のなさを痛感いたしました。教えて頂きありがとうございました。

投稿日時 - 2017-08-19 02:12:55

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

#include <stdio.h> は冒頭に記述してありますか?
あと、putchar() は1文字だけ出力する関数だったと思います。文字列はダメだったような。

投稿日時 - 2017-08-18 17:43:39

お礼

教えて頂き有難うございました。

投稿日時 - 2017-08-19 02:13:13

ANo.1

stdio.hをincludeしましたか?

投稿日時 - 2017-08-18 16:32:33

補足

早速の回答ありがとうございます。はい一応考えられる原因として<stdio.h>のinclude及び_CRT_SECURE_NO_WARNINGのdefineなど色々試してみましたが、全て弾かれます。

投稿日時 - 2017-08-18 16:42:08

あなたにオススメの質問