- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
所以我正在阅读一本关于用 C 编写 shell 的书,我想尝试用 C++ 编写它。我遇到了以下代码:
for( ; ; )
{
if (fputs(PROMPT, stdout) == EOF)
continue;
if (fgets(inbuf, MAX, stdin) == NULL)
continue;
//and so on....
}
我不明白这里fputs()
的用法。
(a) 如果 stdout 是终端,EOF 有什么意义吗?除了流可能已经关闭之外,您可以向终端写入什么样的错误?
(b) 如果 stdout 之前被重定向并且实际上是一个管道或文件,那么可能会出现几个不同的错误。它们在哪里列出?见下文 (c)。
(c) 在上面的 (b) 之后,ferror() 似乎没有多大帮助。它的返回值是否映射到 errno 的返回值,因此与使用 perror() 之类的东西一样?为了做类似的事情,常量保存在哪里
if (ferror() == SYSTEM_ERROR_13)
(d) 在上面的代码中,如果 fputs() 确实返回错误,为什么“继续”会起作用?难道不需要先用 clearerr() 之类的东西清除错误,否则它只会反复失败吗?
是C++中的等价代码:
for( ; ; )
{
if (! cout << PROMPT)
{
cout.clear();
continue;
}
if (! getline(cin, inbuf))
{
cin.clear();
continue;
}
//and so on....
}
最佳答案
if (fputs(PROMPT, stdout) == EOF)
continue;
a) 如果 stdout 是终端,EOF 有什么意义吗? - fputs函数在出错时返回 EOF。
b) 似乎可能出现不同的错误。它们列在哪里? - 写入 stdout 失败的原因真的很重要吗?您确定要深入了解吗?
c) ferror() 似乎没有什么帮助...使用类似 perror() 的东西? 它们都基于全局变量 errno 工作。虽然perror对你来说会是更好的选择,因为它以指定的格式输出到 stderr。
d) 在上面的代码中,如果 fputs() 确实返回错误,为什么“继续”会起作用? - 这似乎是不正确的。
根据这些事实,它应该是这样的:
if (fputs(PROMPT, stdout) == EOF)
{
perror("The following error occurred");
exit(1);
}
if (fgets(inbuf, MAX, stdin) == NULL)
{
perror("The following error occurred");
continue;
}
2。 C++ 中是否有等效代码? - 否。只有一个区别:fgets读取该行并将 '\n' 包含在字符串中,而 getline读取该行但未存储定界符 ('\n')。
关于c++ - fputs()、fgets()、ferror() 问题和 C++ 等效项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9059486/
以下编程在“fputs”的第一个实例处崩溃,尝试将“fname”打印到文件 Member_inf。我还尝试打印常量字符串“abcdefg”,但仍然失败。到底做错了什么?看来是文件的初始化。如果可能的话
我的输入文件包含以下格式的产品集合: name price symbol 示例文件是: Ball 6.24 u 我想读取文件,将文本解析为struct,并使用相同的元素重写文件,但不包含带有符号u的元
总的来说,我对 C 语言和内存分配还很陌生。基本上我想做的是复制未知大小的输入文件的内容并使用递归反转其内容。我觉得我已经非常接近了,但是当我尝试放入我认为是文件反转内容的内容时,我不断遇到段错误(我
fseek(ofile, 13, SEEK_SET); fputs("\t", ofile); do { ch = getc(ofile); printf("%c", ch);
当运行下面的代码时,我没有得到任何输出,但我不知道为什么。 # include int main() { fputs("hello", stdout); while (1);
我试图在文件中写入数组的全部内容。这是我的代码: fichier = fopen(patch, "w+"); if (fichier != NULL) { if(methode=
#include int main() { FILE *fp; char str[60]; char data[50]; char * pch; /* opening
我在完成下面的作业时遇到了问题。每当我尝试将 fputs 参数合并到一行中时,错误都会显示 fputs 中的参数过多。 我想做的是在每个子文件中创建一个输出,其中包括时间以及一行中的文本,但下面的代码
我有以下代码: #include #include #include using namespace std; int main(){ size_t size; char *li
int main(int argc, char *argv[]) { FILE *datafile, *outputfile; char c, *line, *line1, *line
在这个程序中,我的 edit() 函数无法正常工作。当我尝试写一些东西时,它只会删除整个内容,而在 appendText() 中只有一个单词被附加?有没有办法将整个字符串写入文件? #include
我目前正在尝试用 C 语言创建一个数据库,使用 .txt 文档作为存储所有数据的地方。但是我无法让 fputs() 换行,所以我的程序在此 .txt 文档中写入的所有内容都只在一行上。 int
我有以下简单代码: #include int main(){ char buffer[20] = "abc"; FILE *pFile; pFile
我终于让自己去看了一些 Linux 代码。我现在正在查看 ls.c。 在底部的函数 usage() 中,我发现了很多这样的语句: fputs (_("\ List information about
不可能执行类似 fputs(4, fptOut); 的操作,因为 fputs 不喜欢整数。我该如何解决这个问题? 执行 fputs("4", fptOut); 不是一个选项,因为我正在使用计数器值。
或等效地, 为什么 puts() 会追加一个尾随换行符? 当输出字符串时,可能会用到两个类似的函数:fputs() 和puts()。 puts() 在输出时自动在末尾添加一个新行,但 fputs()
我在 Windows 上遇到文件写入失败的问题。我将它简化为这个例子: FILE* f = fopen("test.out", "r+b"); fseek(f, -1, SEEK_END); // o
为什么 fputs() 或 fprintf() 没有写入 %s 的 file.txt ?我尝试了这两个函数,但它们似乎没有写入文件。但是,当对 %d 使用相同的函数时,它目前确实有效。至于预期输出与当
为什么 fputs() 或 fprintf() 没有写入 %s 的 file.txt ?我尝试了这两个函数,但它们似乎没有写入文件。但是,当对 %d 使用相同的函数时,它目前确实有效。至于预期输出与当
假设test.txt是这样的: aaaaa aaaaa aaaaa 测试代码是这样的: #include #include #include int main() { FILE *f = f
我是一名优秀的程序员,十分优秀!