C++ 如何使用FGET?
如何在添加故事功能中使用fgets 当我使用gets时效果很好,但当使用fgets时效果不好C++ 如何使用FGET?,c++,C++,如何在添加故事功能中使用fgets 当我使用gets时效果很好,但当使用fgets时效果不好 void add_story() { clear(); ofstream file; char name[10]; cout << "\n\n\tEnter your file name: "; cin.ignore(); fgets(name,10,stdin); file.open(name
void add_story() {
clear();
ofstream file;
char name[10];
cout << "\n\n\tEnter your file name: ";
cin.ignore();
fgets(name,10,stdin);
file.open(name);
if (!name) {
cout << "\tError open file\n";
add_story();
}
else {
char wards[200];
cout << "\t Enter your daily: \n";
fgets(wards, 20, stdin);
file << wards<<"\n";
cout << "\t--------------------------------------------------------------\n";
}
file.close();
}
void add_story(){
清除();
流文件;
字符名[10];
用strcspn()
关闭潜在的拖尾\n
以下是fgets手册页的摘录: fgets()从流中最多读取一个小于大小的字符,并且 将它们存储到s指向的缓冲区中。在 EOF或换行符。如果读取换行符,则将其存储到缓冲区中。 终止的空字节('\0')存储在中的最后一个字符之后 缓冲区
以下是gets手册页的摘录: gets()将一行从stdin读入由s指向的缓冲区,直到 终止换行符或EOF,用空字节替换 ('\0')
因此,fgets将换行符存储在缓冲区中。文件名很可能不包含换行符,因此找不到文件,并且您的程序无法运行。您使用的是
fgets
而不是cin
?它不能很好地描述实际问题。可能不是整个问题,但如果(!name)
检查永远不会进入错误块!我想你可能是指如果(!file)
…我猜这是因为fgets()
包含行尾字符。你是被迫使用C风格编程还是可以使用std::string
和std::getline()
?取决于平台,name[strcspn(名称,“\r\n”)]='\0';
也可能有用。@Eljay True。。。。。
char name[10];
if (fgets(name, sizeof name, stdin)) {
name[strcspn(name, "\n")] = '\0';
file.open(name);