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++。现在我想在我的桌面上执行它,而 Visual 不会有它,除了打开 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 Compiler) 不允许在代码中声明变量。它要求您在函数或块的开头定义变量。

可悲的是,即使它是 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 回答