我有一项工作要做,我必须在函数中保留一个循环,期望以下参数: - “我”要插入 - “s”来搜索 - “q”退出
如何保持此循环?我已经查找了一些选项,似乎可以使用一段时间或一个开关,但我不确定哪个是读取这些字符的最佳方式(也许是fscanf?)。我也不确定如何读取参数“i”之后的东西,因为输入将是“i word 9”,所以在检测到i要插入后我必须读取一个字符串和一个int。 任何人都知道如何做到这一点?我很抱歉这看起来很简单,但我是编程新手。
编辑:这是我到目前为止所拥有的
while (loop) {
fscanf(stdin,"%c",&par);
if (strcmp(&par,"i")){
scanf("%s %d",palavra,p);
raiz = insere(raiz,&palavra,p);
}
else if (strcmp(&par,"b")){
scanf("%s",palavra);
busca(raiz,&palavra);
}
else if (strcmp(&par,"q"))
loop = 0;
}
编辑2:这就是我现在所拥有的,当参数为i时,我在读取字符串和整数时遇到问题,不知何故它崩溃了函数
while (1) {
c = getchar();
if (c == 'f')
break;
else if (c == 'i'){
fscanf(stdin,"%s",&palavra);
scanf("%d",&p);
raiz = insere(raiz,palavra,p);
}
else if (c == 'b') {
scanf("%s",palavra);
busca(raiz,palavra);
}
}
提前致谢!
答案 0 :(得分:0)
与我认为你想要的相比,你所拥有的代码看起来并不太糟糕。您可以将“while(loop)”替换为“while(1)”,然后将现有代码替换为“loop = 0;”与“休息”这是一种更标准的做事方式。此外,“fscanf(stdin ...”与“scanf(...”)相同,默认情况下,scanf将从stdin读取。您可能需要检查strcmp的文档,因为它返回0表示完全匹配,我不要以为你会在'if'语句中做你想做的事情。你应该能够使用scanf来读取你想要的值,它会给你一个错误吗?
答案 1 :(得分:0)
您正在使用3次分开扫描。这意味着你不能输入这个“i word 9”,但是在EOL分隔时输入一个命令或参数(按回车键)..我,输入,输入,输入,9,输入......然后功能应该实际上进一步在那些“如果”。使用这些扫描,您还应考虑打印有关预期输入的信息(“选择操作q / i / f”) 我建议使用一些东西来测试这些输入。
if (scanf("%d", &p) == 0) {
printf("Wrong input");
break;
}