使用VC ++ Express在C中创建文本文件

时间:2013-02-28 04:17:12

标签: c visual-studio file-io

好的,这是一个奇怪的问题,但我不知道为什么这不起作用......

#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 ++。现在我想在我的桌面上做这个并且Visual不会拥有它,除了打开cmd窗口之外什么都不做,接下来输入文件名的第一行,我这样做然后按回车键,程序关闭,终止。我添加了源文件项并使用正确的* .c扩展名命名,并且我之前在此IDE中编写了* .c,但从未创建过直到现在的文件,我可以保证这是问题。任何人都知道为什么会发生这一切?

编辑:我已经打破了一些代码来试图找出问题,看起来似乎是这些问题......

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

当我尝试构建并运行时,我得到一些典型的VC错误消息,这在我的输出中有关这些“不明确”

“错误C2275:'FILE':非法使用此类型作为表达式” “错误C2065:'inputf':未声明的标识符” “警告C4047:'=':'int'与'FILE *'的间接等级不同”

那么为什么这些行在我的Mac上的NetBeans上完全正常工作,但在Windows上却没有?我想到某种可移植性问题?

1 个答案:

答案 0 :(得分: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;

}