函数内部的参数

时间:2013-12-08 17:56:00

标签: c

我有一项工作要做,我必须在函数中保留一个循环,期望以下参数: - “我”要插入 - “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);
        }
    }

提前致谢!

2 个答案:

答案 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;
}