【问题标题】:Using getchar() in a while loop or a do while loop在 while 循环或 do while 循环中使用 getchar()
【发布时间】:2021-07-18 19:12:17
【问题描述】:

我最近在阅读 C prime plus 并且有一个问题:

void foo1(int n, char ar[n])
{
    int i = 0;

    while ((ar[i] = getchar()) && !isblank(ar[i++]) && i < n)
        continue;
}
void foo2(int n, char ar[n])
{
    int i = 0;
    do
        ar[i] = getchar();
    while (!isblank(ar[i++]) && i < n);
}

似乎它们在测试时具有相同的输出,但我仍然想知道:

这两个函数是等价的吗?

在编译时,它们是否生成相同的编译代码?

如果不是,哪个更高效?

【问题讨论】:

  • 提示:如果文件包含空字符怎么办?
  • 请注意,如果出现文件结尾或读取错误,两个版本都会出现异常。
  • 您需要空终止输出吗?调用代码如何知道读取了多少个字符?
  • 此外,它们都会导致负字符的未定义行为(isblank 的参数必须是非负数)

标签: c while-loop do-while


【解决方案1】:

所以,while 命令首先检查条件,而do...while 在一次内执行命令,然后检查条件。

while 命令比do...while 命令更常见,因为大多数程序员不希望循环执行一次,无论条件是否满足。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-21
    • 2021-07-27
    • 2011-02-02
    • 1970-01-01
    • 2016-03-27
    • 2015-06-04
    • 1970-01-01
    • 2015-02-16
    相关资源
    最近更新 更多