暂停执行 C 代码的 exe
Pause the execution of exe of a C code
我用 C 语言开发了一个简单的控制台实用程序,它可以解析各种文本文件。
IDE - 代码块
OS - windows
我打算分发它的可执行文件。
可执行文件工作正常,但与从 IDE 执行时不同,执行结束时不会 pause/wait 击键。
我尝试使用 getchar()/system("pause"),但执行不会在那里暂停。
是否有替代方法在结束执行之前等待击键,以便用户可以查看输出?
您可以使用
getchar();
twice ,因为最后一个 '\n' 换行符很可能会被你的 getchar() 消耗掉。
或使用
scanf(" %c");
加上额外的 space
在文件末尾。
不要使用 system("pause")
,因为它不可移植。 getchar
另一方面应该可以工作。你能 post 一些代码吗?也许键盘缓冲区上有一些东西被你唯一的 getchar
调用消耗了。
这取决于代码的其他部分如何接收用户的输入(即从 stdin
读取)。
如果您的程序没有从用户那里读取任何内容,或者正在使用 getchar()
.
进行读取,getchar()
方法将工作正常
但是,一般准则是每个流的输入风格保持一致。输入的风格是指面向字符的(函数如getchar()
)、面向行的(如fgets()
)、格式化的(函数如scanf()
)或无格式的(如fread()
).这些函数中的每一个都根据输入做不同的事情——例如 getchar()
将读取一个换行符作为整数值,如果缓冲区足够长,fgets()
将在读取的字符串末尾留下一个换行符, scanf()
经常会在遇到换行符时停止,但将换行符留在流中以供接下来读取。
最终效果是不同风格的输入会相互作用,并且会产生奇怪的效果(例如,数据被忽略,而不是像您看到的那样等待输入)。
例如,如果您使用 scanf()
,您可能还应该使用 scanf()
让您的程序在最后等待。不是 getchar()
- 因为在实践中,很可能有换行符等待读取,所以 getchar()
将立即 return,并且您的程序在终止前不会暂停。
上述情况也有例外(例如,取决于使用的格式字符串以及用户输入的内容)。但作为一个经验法则:在阅读 stdin
的方式上要保持一致,并且用户将不得不非常努力地工作以在终止之前停止程序暂停。
当然,更简单的替代方法是从命令行 运行 程序(例如 CMD.EXE 命令 shell)。然后 shell 将在您的程序终止时接管,程序输出将对用户可见,因此您的程序不需要暂停。
我用 C 语言开发了一个简单的控制台实用程序,它可以解析各种文本文件。
IDE - 代码块 OS - windows
我打算分发它的可执行文件。
可执行文件工作正常,但与从 IDE 执行时不同,执行结束时不会 pause/wait 击键。
我尝试使用 getchar()/system("pause"),但执行不会在那里暂停。
是否有替代方法在结束执行之前等待击键,以便用户可以查看输出?
您可以使用
getchar();
twice ,因为最后一个 '\n' 换行符很可能会被你的 getchar() 消耗掉。
或使用
scanf(" %c");
加上额外的 space
在文件末尾。
不要使用 system("pause")
,因为它不可移植。 getchar
另一方面应该可以工作。你能 post 一些代码吗?也许键盘缓冲区上有一些东西被你唯一的 getchar
调用消耗了。
这取决于代码的其他部分如何接收用户的输入(即从 stdin
读取)。
如果您的程序没有从用户那里读取任何内容,或者正在使用 getchar()
.
getchar()
方法将工作正常
但是,一般准则是每个流的输入风格保持一致。输入的风格是指面向字符的(函数如getchar()
)、面向行的(如fgets()
)、格式化的(函数如scanf()
)或无格式的(如fread()
).这些函数中的每一个都根据输入做不同的事情——例如 getchar()
将读取一个换行符作为整数值,如果缓冲区足够长,fgets()
将在读取的字符串末尾留下一个换行符, scanf()
经常会在遇到换行符时停止,但将换行符留在流中以供接下来读取。
最终效果是不同风格的输入会相互作用,并且会产生奇怪的效果(例如,数据被忽略,而不是像您看到的那样等待输入)。
例如,如果您使用 scanf()
,您可能还应该使用 scanf()
让您的程序在最后等待。不是 getchar()
- 因为在实践中,很可能有换行符等待读取,所以 getchar()
将立即 return,并且您的程序在终止前不会暂停。
上述情况也有例外(例如,取决于使用的格式字符串以及用户输入的内容)。但作为一个经验法则:在阅读 stdin
的方式上要保持一致,并且用户将不得不非常努力地工作以在终止之前停止程序暂停。
当然,更简单的替代方法是从命令行 运行 程序(例如 CMD.EXE 命令 shell)。然后 shell 将在您的程序终止时接管,程序输出将对用户可见,因此您的程序不需要暂停。