如何“通过”循环

时间:2019-08-24 05:44:34

标签: c

是否可以暂停执行c循环?例如,类似于python中的raw_input。基本上,我想遍历while循环并检查变量在循环的每次迭代中的变化情况:

while ((c=getchar()) != EOF) {


    // in_string
    if (c == '"' && !in_single_line_comment && !in_multi_line_comment && !has_preceding_backslash)
        in_string = !in_string;

    // has_preceding_backslash
    if (c == '\\' && !in_string && !in_single_line_comment && !in_multi_line_comment)
        has_preceding_backslash = !has_preceding_backslash;

    // this line here, to 'pause' the program until further user input.
    raw_input("Character: %c | InString: %d | HasSlash: %d", c, in_string, has_preceding_backslash)

}

有没有办法做这样的事情?

3 个答案:

答案 0 :(得分:2)

  

如何“循序渐进”循环

查看到目前为止给出的其他答案('使用调试器''GDB');另外:您可能正在使用的任何IDE(例如eclipse,CodeBlocks等)都为调试器提供了GUI界面,这将使调试更加简单...

如果找不到合适的按钮(在月食中,它看起来像是个bug(甲虫)...),将鼠标悬停在它们上方以查看工具提示,其中之一应该可以显示您的按钮。或者,您应该找到一些菜单项。

下一步将是学习如何设置断点,以便程序执行恰好在所需的点停止。

    // this line here, to 'pause' the program until further user input.
    raw_input("Character: %c | InString: %d | HasSlash: %d", c, s, h)

现在,如果您真的只想获得用户输入(虽然与问题标题相反,但评论却暗示了这一点),则您有几种选择,请看看scanf * getcharfgets(如果您想阅读完整的一行),strtok(用fgets标记之前读取的字符串)和this answer(将字符串解析为整数)。

* 当将字符串读入缓冲区时,请务必小心– 始终提供长度保护,以防止超出缓冲区范围写入!此保护标志必须比缓冲区大小小1个,以便为终止的空字符留出空间。

答案 1 :(得分:0)

这就是调试器的目的。

这是一个有用的链接,可让您进入正确的轨道。

How to debug using gdb?

答案 2 :(得分:0)

执行此操作的最佳方法是调试器,例如GDB。

GDB可能已经安装在您选择的Linux发行版中。可以通过运行gdb ./executable-name来使用它。使用break filename.c:line-numberbreak function_name设置断点。使用runstart运行有问题的程序。 p variable_name查看变量的值。使用step执行下一行(并输入任何函数调用)。在不输入函数调用的情况下,使用next执行下一行。确保使用-g编译代码。另外,layout src在使用调试器时很高兴看到您的代码。

如果要在用户输入密钥之前停止执行,则可以使用getchar()中的stdio.h