我正在编写一个程序来测试多个DFA和NFA。这是我的代码:
char input[256];
DFA dfa = oneA();
while(1){
printf("\nEnter an input: ");
scanf("%s", input);
if (strcmp(input, "quit") == 0){
break;
}
printf("\nResults for input \"%s\": ", input);
printf("%s", DFA_execute(dfa, input) ? "true" : "false");
}
这是我期望的行为:
Testing DFA that recognizes exactly "zxy"
Enter an input: *zxy*
Results for input "zxy": true
其中的星号仅指示用户输入的部分。 但是,最终发生的事情是这样:
Testing DFA that recognizes exactly "zxy"
Enter an input: *zxy*
zxy
Results for input "zxy": true
我的两个打印语句之间的某件事是将输入和换行符打印到控制台。奇怪的是,它似乎是scanf,因为对scanf的多次调用将复制此行为。只需以下代码:
#include <stdio.h>
int main() {
char input[256];
scanf("%s", input);
printf("%s", input);
}
产生此输出:
*test*
test
test
我不确定为什么为什么我不认为scanf应该输出任何东西。谁能帮我弄清楚发生了什么事?
答案 0 :(得分:0)
我不知道是什么原因导致的,但是它似乎是特定于IDE的(我正在使用CLion)。使用gcc从命令行编译不会重现该问题。