わかりました、私はしばらくの間 C++ でプログラミングをしており、友人が C で行う割り当てを手伝おうとしています。C++ とは異なるいくつかのことを C で行う方法を見た後、私は友人が何かをコンソールに出力し、ユーザーの入力を読み取る簡単なプログラムを作成するのを手伝ってください。次のコードがあります。
#include <stdlib.h>
#include <stdio.h>
#define WIN32_LEAN_AND_MEAN
#include <Windows.h>
int main(int argc, char* argv[])
{
char str1[] = "Please enter your name.";
printf(str1); // This appears to be the nuisance line.
char buffer[64];
fgets(buffer, 64, stdin);
printf("Your name is %s", buffer);
Sleep(5000);
return 0;
}
さて、ここで奇妙なことがあります。これをコンパイルしようとすると、コンソールに次のエラーが表示されます。
1>c:\users\nkosi\documents\visual studio 2012\projects\c++\credit2\credit2\main.c(12): error C2143: syntax error : missing ';' before 'type'
1>c:\users\nkosi\documents\visual studio 2012\projects\c++\credit2\credit2\main.c(13): error C2065: 'buffer' : undeclared identifier
1>c:\users\nkosi\documents\visual studio 2012\projects\c++\credit2\credit2\main.c(13): warning C4047: 'function' : 'char *' differs in levels of indirection from 'int'
1>c:\users\nkosi\documents\visual studio 2012\projects\c++\credit2\credit2\main.c(13): warning C4024: 'fgets' : different types for formal and actual parameter 1
1>c:\users\nkosi\documents\visual studio 2012\projects\c++\credit2\credit2\main.c(15): error C2065: 'buffer' : undeclared identifier
ただし、printf ステートメントの下のすべてのコードを削除すると、プログラムは完全にコンパイルおよび実行されます。printf ステートメントを削除すると、プログラムは完全にコンパイルおよび実行されます。このエラーがいかに奇妙であるかを確認するために、コードを次のように変更して、コンパイルするとどうなるかを確認しました。
int main(int argc, char* argv[])
{
char str1[] = "Please enter your name.";
printf(str1); // This appears to be the nuisance line.
int x = 5;
return 0;
}
これをコンパイルすると、次のエラーが発生します...
1>c:\users\nkosi\documents\visual studio 2012\projects\c++\credit2\credit2\main.c(12): error C2143: syntax error : missing ';' before 'type'
printf を使用する他の人の C プログラムを調べることにしましたが、何も悪いことをしているようには見えません。私は Visual Studio 2012 を使用していますが、ここに問題があると思います。私は C を使用しないかもしれませんが、元のコードが完全に有効な C++ コード (私は C++ コードとしてコンパイルし、コンパイルして正常に実行されました) であり、完全に有効な C コードであるように見えます。その printf ステートメントで何かおかしなことが起こっています。私はどこかで何か間違ったことをしていますか?