我的一個朋友需要在他的一個課程中使用MATLAB,所以他打電話給我(計算機科學專業),詢問我是否可以教他C.我熟悉C++ ,所以我也熟悉了一般語法,卻不得不對IO庫C.C程序無法創建輸出文本文件
我創建了一些簡單的IO程序,以顯示我的朋友看了,但我的第三個程序是導致我麻煩。當我使用Eclipse(使用CDT)在我的機器上運行程序時,Eclipse的控制檯產生一個錯誤的輸出,而不是提示我輸入數據,它會得到輸入,然後使用FAILURE一次打印所有數據。
程序應該從用戶那裏得到一個文件名,創建該文件,直到用戶輸入一個空行寫入。
當我編譯/通過控制檯在我的機器上運行它(G ++ files2.c)提示我輸入的數據正確,但故障出現時,並沒有輸出文件。
我認爲錯誤在於我如何使用char數組,因爲使用scanf來獲取文件名將創建一個功能文件(可能因爲它忽略了空白),但不能進入while循環。
#include <stdio.h>
#define name_length 20
#define line_size 80
int main() {
FILE * write_file; // pointer to file you will write to
char filename[name_length]; // variable to hold the name of file
char string_buffer[line_size]; // buffer to hold your text
printf("Filename: "); // prompt for filename
fgets(filename, name_length, stdin); // get filename from user
if (filename[name_length-1] == '\n') // if last char in stream is newline,
{filename[name_length-1] = '\0';} // remove it
write_file = fopen(filename, "w"); // create/overwrite file user named
if (!write_file) {printf("FAILURE");} // failed to create FILE *
// inform user how to exit
printf("To exit, enter a blank line (no spaces)\n");
// while getting input, print to file
while (fgets(string_buffer, line_size, stdin) != NULL) {
fputs(string_buffer, write_file);
if (string_buffer[0] == '\n') {break;}
}
fclose(write_file);
return 0;
}
我應該如何去修復程序?我發現用戶終止的輸入寫入文件幾乎沒有。
現在,如果你能原諒我,我有幾個文件的刪除了我大學的UNIX服務器,並且因爲他們有令人費解的文件名,創建我叫不上名字指定他們...
EDIT-- ----
就像我說的,我能夠使用
scanf("%s", filename);
獲得工作的文件名(不換行字符)。但是,無論我在while循環中使用scanf還是fgets,如果將它們與scanf一起用於文件名,我無法寫入任何文件,因爲它不會進入while循環。
我應該如何重構我的寫作文件和我的while循環?
'frnn()'失敗後設置了'errno'? – Mike
你有寫權限嗎?我問,因爲你說你的大學的服務器,這些類型的設置通常有嚴格的權限 –
@Sithregal這可能是值得嘗試避免混合fgets和scanf。如果改變了換行檢查,以: 如果(文件名[strlen的(文件名)-1] == '\ n') {文件名[strlen的(文件名)-1] = '\ 0';} 似乎爲我工作,但你也寫了文件的最後一行,空行。你可能會更好地使用一個do ... while循環而不是一個while循環,這是我的經驗中一個非常不充分的結構:-) – cosimo193