Printf doesnt pop
Printf doesnt pop
我是c++编程的新手,在学习lynda.com教程时遇到了一个问题。在教程视频上似乎还可以,但这对我不起作用。
#include <stdio.h>
enum { max_string = 127 };
static char string[max_string + 1 ] = "";
int main( int argc, char ** argv ) {
printf("Type a string: ");
fgets(string, max_string, stdin);
printf("The string is %s", string);
return 0;
}
当我运行这个程序时,会出现空白,当我在橡皮布空间中纠正类似"嘿"的内容时,就会发生这种情况:
hey
Type a string: The string is hey
这对我来说很奇怪,我不知道我做错了什么。我正在使用Eclipse btw.
有人能帮我吗?
您的标准输出流似乎是行缓冲的,这意味着您打印的文本在打印完一整行之后才会出现。如果您正在向交互式设备写入,则应该不缓冲;也许有什么东西阻止了系统意识到输出设备是交互式的。
添加
fflush(stdout);
在您的第一个printf
之后,应该强制立即出现"Type a string: "
提示(即使您的输出没有缓冲,fflush(stdout)
也是无害的)。
我正要建议将您的第二个printf
从:更改为
printf("The string is %s", string);
至:
printf("The string is %sn", string);
以确保程序的输出以换行符结束(如果不是的话,有些系统可能会表现错误)——但fgets()
实际上会将换行符留在字符串中(除非输入行很长)。最终你会希望能够处理这种事情。
相关文章:
- 在c++队列中使用pop和visit实现线程安全
- C++ push() 和 pop() 方法使用指针的动态 LinkedList 的问题
- C++ 带模板的链表 - 如何创建 pop()?
- std::stack的奇怪行为,pop()返回相同的值
- 为什么以下 POP 功能无法在主机或设备 (CUDA) 上运行?
- C++ 中类成员的堆栈的 pop() 函数
- 没有相应 POP 的编译指示包(推送)会导致堆栈粉碎
- 递归推动POP POSTFIX计算器无法正确执行操作,只需将最后一个数字作为结果
- 关于反序列化程序 pop 函数的模板化专用化的歧义
- E0020 标识符"pop"未定义
- 无效地将 void 表达式与队列和 .pop() 一起使用
- 当您通过Qt小部件打开文件时,是否可以'pop-up'文件?
- 模板堆栈类的复制构造函数中的 pop() 和 push() 不起作用
- C++ priority_queue pop() and top() discrepancy
- C 链接列表堆栈POP功能崩溃
- std :: queue :: pop()在其std :: unique_ptr数据上操作
- 当队列为空时,priority_queue pop()和top()的C++行为
- 无锁的堆栈:在POP()期间检查危险指针时可见性问题
- C 中的按/POP堆栈类程序
- Printf doesnt pop