2013-02-28 35 views
1

好吧,這是一種奇怪的問題,但我不知道爲什麼這不工作...創建在C文本文件,採用VC++速成

#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"); 

當我試圖建立和運行,我得到了一些典型 「錯誤C2065:inputf:未聲明的標識符」 「警告C4047這些「輕率」

「:‘文件’非法使用這種類型作爲表達式的錯誤C2275」 VC錯誤消息,並且這在我的輸出:'=':'int'與'FILE *'之間的間接級別不同「

那麼,爲什麼這些代碼行在我的Mac上的NetBeans上完全正常工作,但在Windows上卻不是這樣?我想象的某種可移植性問題?

+0

解釋的意思是「不工作」 – 2013-02-28 04:22:08

+0

這可能意味着不同的事情,你沒有得到所需要的輸出,不會創建您的文件,你會得到錯誤嘗試創建一個文件等等等 – 2013-02-28 04:22:56

+0

對不起,是的,意識到我有多麼不清楚,編輯了更多關於錯誤的信息。 – Sherifftwinkie 2013-02-28 04:23:55

回答

5

這是發生,因爲CL.EXE(微軟編譯)不允許在代碼變量聲明。它要求您在函數或塊的開始處定義變量。

可悲的是,即使它是C99的標準,即使是對於CL.EXE MSVC++ 2010不支持它!

更改您的代碼:

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; 

} 
+0

大聲笑這是如此愚蠢!以及感謝,多麼奇怪的小怪癖 – Sherifftwinkie 2013-02-28 04:29:57

+0

@Sherifftwinkie我們都已經通過微軟的C編譯器同一時間或其他:-P這就是爲什麼我用cygwin + GCC通常被咬! – 2013-02-28 04:30:51

+0

是的,我試圖讓對和交換到使用日食(我使用的Java),它只是絕對不會有,所以回來VC,並讓它成爲 – Sherifftwinkie 2013-02-28 04:32:35