1

さて、これはちょっと奇妙な質問ですが、なぜこれが機能しないのかわかりません...

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_NAME 15
#define MAX_SUBSEC 3
#define N 128

struct student{

int term;
int id;
char lastname[MAX_NAME];
char firstname[MAX_NAME];
char subjectnam[MAX_SUBSEC];
int subject;
int catalog;
char section[MAX_SUBSEC];

}students[10];

int main(){

int i;
char poop[10];
char fname[128];

printf("Enter the name of the text file: ");
scanf("%123s",fname);

strcat(fname,".txt");

FILE *inputf;
inputf = fopen(fname,"w");

if (inputf == NULL){

     printf("I couldn't open results.dat for writing.\n");
     exit(0);

  }

printf("Enter first name: "); scanf("%s", poop);

fprintf(inputf, "%s\n", poop);

for (i=0; i<=10; ++i)
     fprintf(inputf, "%d, %d\n", i, i*i);

fclose(inputf);

return 0;

}

これで、このコードの終わりは、ファイルの作成と書き込み、およびその他すべての優れた機能の練習をしているだけです。これをコーディングし、NetBeansを使用してMacで実行すると、正常に機能しました。ちなみに、これはすべてC++ではなくCで実行しています。今、私はデスクトップでそれをやりたいのですが、ビジュアルはそれを持っていません、何もしませんが、cmdウィンドウを開き、ファイル名を入力するように指示されている最初の行を取り、Enterキーを押してプログラムを閉じます終了します。ソースファイルアイテムを追加し、適切な* .c拡張子を付けて名前を付けました。以前は、このIDEで* .cをコーディングしましたが、今までファイルを作成する必要はありませんでした。これが問題であることを保証できます。なぜこれがすべて起こるのか誰かが知っていますか?

編集:問題を特定するためにいくつかのコードを分割しましたが、これらの行が原因のようです...

FILE *inputf;
inputf = fopen(fname,"w");

ビルドして実行しようとすると、典型的なVCエラーメッセージが表示され、これらの「不注意」に関する出力にこれが表示されます。

"エラーC2275:'FILE':式としてのこのタイプの不正使用" "エラーC2065:'inputf':宣言されていない識別子" "警告C4047:'=':'int'は'FILE*'とは間接レベルが異なります"

では、これらの行がMacのNetBeansで完全に機能するのに、Windowsでは機能しないのはなぜですか?私が想像するある種の移植性の問題?

4

1 に答える 1

5

これは、CL.exe(Microsoftコンパイラ)がコード内の変数の宣言を許可していないために発生しています。関数またはブロックの開始時に変数を定義する必要があります。

残念ながら、C99標準ですが、MSVC++2010用のCL.exeでもサポートされていません。

コードを次のように変更します。

int main(){
    int i;
    char poop[10];
    char fname[128];
    FILE *inputf;    
    printf("Enter the name of the text file: ");
    scanf("%123s",fname);
    strcat(fname,".txt");
    inputf = fopen(fname,"w");
    if (inputf == NULL){

         printf("I couldn't open results.dat for writing.\n");
         exit(0);

      }

    printf("Enter first name: "); scanf("%s", poop);

    fprintf(inputf, "%s\n", poop);

    for (i=0; i<=10; ++i)
         fprintf(inputf, "%d, %d\n", i, i*i);

    fclose(inputf);

    return 0;

}
于 2013-02-28T04:25:14.640 に答える