我想做的是,创建一个程序,要求用户输入他想要写多长时间的文本。与他在控制台中所写的内容相比,在代码中提到的路径下,将自动保存在名为file的文本文件中。因此,为了询问用户我使用int i的字符数组的大小。然后使用gets命令来获取他用空格和其他字符编写的任何内容。但是代码似乎不起作用,它询问用户有多少个字符,然后运行完成和终止。还要告诉我,每当用户启动程序时,应该如何使它在Data文件夹中创建一个新文件?我不想覆盖现有的文件或附加文本到它。我想要创建一个新的文件,让用户命名它的任何感觉,然后存储在新的文件中的文本。
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *file = fopen("C://Users//Abhimanyu Aryan//Desktop//Data//Hello.txt", "w");
printf("\t\tThis program allows you to write detailed data\n\n\n");
int c;
printf("you many characters file you want to write? Specify: ");
scanf("%i",&c);
printf("\n\nEnter your text here: ");
char text[c];
gets(text);
fprintf(file, "%s" , text);
printf(" the file has been written succesfully!!!!");
fclose(file);
return 0;
}发布于 2014-03-15 09:20:35
您的代码有几个错误。首先,您应该检查fopen()的返回值,以确保一切都成功:
FILE *file = fopen("C://Users//Abhimanyu Aryan//Desktop//Data//Hello.txt", "w");
if (file == NULL) {
/* Handle fopen() error */
fprintf(stderr, "Couldn't open file for writing!");
exit(EXIT_FAILURE);
}第二个错误是您使用的是gets()。gets() 是旧的、过时的和不安全的,您不应该使用它。使用fgets()代替:
char text[c];
fgets(text, sizeof text, stdin);如果您希望用户选择文件名,那么首先询问他,然后打开指定的文件名进行写入。如果文件不存在,它将自动创建:
#define MAX_FILENAME_LENGTH 128
char filename[MAX_FILENAME_LENGTH];
printf("Enter filename (max. %zu characters): ", sizeof(filename)-1);
fgets(filename, sizeof filename, stdin);
FILE *file = fopen(filename, "w");
if (file == NULL) {
/* Handle fopen() error as mentioned above*/
}更新
请注意,scanf("%i", &c);将在缓冲区上保留一个换行符(从您按ENTER键时开始)。这就是为什么fgets()在不等待的情况下过早返回的原因:它从前面的输入中读取缓冲区上的一个新行,并假设您已经完成了(当它到达换行符时fgets停止)。要修复它,您必须在调用scanf()之前使用缓冲的换行符。例如,您可以使用getchar()这样做:
/* ... */
scanf("%i",&c);
/* Consume newline left on buffer from scanf */
if (getchar() == '\r')
(void) getchar();
printf("\n\nEnter your text here: ");
/* ... */if (gethcar() == '\r')是为了使代码在stdin被重定向到带有DOS行尾文件(\r\n而不仅仅是\n)的情况下工作,在这种情况下,必须使用2个字符。即使您计划只从终端使用这个(没有stdin重定向),我仍然建议这样做--按ENTER键也可以将\r\n推向stdin。
发布于 2014-03-15 19:11:26
我会改变
FILE *file = fopen("C://Users//Abhimanyu Aryan//Desktop//Data//Hello.txt", "w");至
FILE *file = fopen("C:/Users/Abhimanyu Aryan/Desktop/Data/Hello.txt", "w");或
FILE *file = fopen("C:\\Users\\Abhimanyu Aryan\\Desktop\\Data\\Hello.txt", "w");我不知道使用两个正斜杠作为目录分隔符是否会导致任何问题,但这当然是不必要的。
https://stackoverflow.com/questions/22421799
复制相似问题