好的,这是一个奇怪的问题,但我不知道为什么这不起作用......
#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上却没有?我想到某种可移植性问题?
答案 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;
}