C 如何";“逐步通过”;环路

C 如何";“逐步通过”;环路,c,C,有没有办法暂停c循环的执行?例如,类似于python中的raw\u输入。基本上,我希望逐步执行while循环,并在循环的每次迭代中检查变量的变化: while ((c=getchar()) != EOF) { // in_string if (c == '"' && !in_single_line_comment && !in_multi_line_comment && !has_preceding_backslash)

有没有办法暂停c循环的执行?例如,类似于python中的
raw\u输入
。基本上,我希望逐步执行
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)

}

有没有这样的方法?

这就是调试器的用途

下面是一个有用的链接,可以帮助您走上正确的道路


最好的方法是使用调试器,如GDB

GDB可能已经安装在您选择的linux发行版上。它可以通过运行
gdb./executable name
来使用。使用
break filename.c:行号
break function\u name
,设置断点。使用
run
start
,运行相关程序
p variable_name
查看变量值。使用
步骤
执行下一行(并输入任何函数调用)。使用
next
在不输入函数调用的情况下执行下一行。确保使用
-g
编译代码。另外,
layout src
可以在使用调试器时看到您的代码

如果要在用户输入密钥之前停止执行,可以使用
stdio.h

如何“跨过”循环

请参阅到目前为止给出的其他答案(“使用调试器”、“GDB”);此外:您可能正在使用的任何IDE(如eclipse、代码块等)也为调试器提供GUI界面,这将使调试更加简单

如果您没有找到合适的按钮(在eclipse中,它看起来像一个bug(甲虫)…),请将鼠标悬停在它们上方以查看工具提示,其中一个应该会显示您的按钮。或者,您应该找到一些菜单项

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

//此行用于“暂停”程序,直到进一步的用户输入。 原始输入(“字符:%c |指令:%d |哈希:%d”,c,s,h) 现在,如果您真的只想获得用户输入(注释暗示了这一点,与问题标题相反),那么您有几个选项,看看*,(如果您想阅读完整的行),(用
fgets
标记之前读取的字符串)和(将字符串解析为整数)


*在将字符串读入缓冲区时要小心——始终提供长度保护,以防止写入超出缓冲区边界!此保护必须小于缓冲区大小,以便为终止的空字符留出空间。

使用调试器和单步执行。不需要“暂停”程序,因为循环顶部的
getchar
将完成此操作。只需将
raw_input
更改为
printf
,并在格式字符串的末尾添加一个
\n
。@user3386109我认为您可能比下面的答案(当然包括我的答案)更了解OPs实际问题。也许你能做出一个突出的答案。@Yunnosch我敢肯定这是许多其他问题的重复。您可以搜索一个,然后关闭问题。但是指定的
raw\u输入
比简单的
getchar()。也许循环甚至是错误的,可能应该是(;;)
而(1)
? // this line here, to 'pause' the program until further user input. raw_input("Character: %c | InString: %d | HasSlash: %d", c, s, h)