使用scanf进行while循环调用函数

时间:2016-02-11 05:18:24

标签: c

我正在尝试为我们使用scanf函数创建while循环的类做一个赋值。基本上该程序是一个计算器,用户应该可以输入添加20之类的东西,我的main函数应该能够从另一个.c调用函数,然后继续循环。

然而,这是我第一次编程,我不知道如何格式化或开始一个扫描用户输入的循环,调用适当的数学函数,应用它,然后继续循环。

到目前为止,这是我为循环所做的事情,令人惊讶的是,它不起作用:

#include "calc.h"
#include "stdheader.h"
int main(int argc, char ** argv){
    int c;
    char token[81];

    while(c != EOF){
        if (scanf("%s", token) == "clear"){
            calc.clear();
        }else{

        }
    }

    return 0;   
}

以下是它应该能够调用的函数示例(或者至少我对它们所拥有的函数)

int local;
local = 0;

void clear(void){
    local = 0;
    printf("\n%d", local);
}

void add(int c){
    local = local + c;
    printf("\n%d", local);
}

5 个答案:

答案 0 :(得分:1)

在C中,字符串(和更一般的数组)不是一等数据类型,不能通过==进行比较。此外,scanf()在任何情况下都不会返回字符串 - 您应该仔细阅读文档。

变化:

if (scanf("%s", token) == "clear")

为:

scanf( "%s", token ) ;
if( strcmp( token, "clear" )

此外,测试c == EOF很危险,因为c未初始化。

int c = 0 ;

答案 1 :(得分:1)

您需要查看scanf()工作原理的详细信息。 Here是一个很好的参考。

scanf()返回读取的令牌数,int不是字符串。无论如何,您无法将字符串与==进行比较。要比较字符串,您必须使用strcmp()库中的string.h

您不需要在calc功能的前面添加clear()

这里有几个错误,你最好的路径可能是先尝试更简单的事情。

答案 2 :(得分:1)

我的观察: 将字符串与==进行比较不是建议的。而是尝试使用strcmp

scanf()仅返回整数,您要将其与if (scanf("%s", token) == "clear")中的清除进行比较 改变代码就像 if(scanf("%5s", token) == 1 && strcmp("clear",token) == 0)

int c = ?没有这个的初始值是什么?你如何比较while(c != EOF)

答案 3 :(得分:0)

  

然而,这是我的第一次编程,我不知道如何格式化或开始扫描用户输入的循环,调用适当的数学函数,应用它,然后继续循环。

当你想解决一个比你想象的更复杂的问题时,你可以解决它在子问题中的分解。首先设计用户界面。用户应该输入什么来与程序通信。

当您有计划集成所需的功能时:

  • 解析用户输入
  • 输出格式
  • 数字处理(在您的示例中为某些算术)。

答案 4 :(得分:0)

解决问题的完全不同的方法。

有多个函数指针。

typedef int (*func) (int,int);

func a[] = {add,sub,div,mul};

让你的用户界面像

printf("0 - add , 1- sub, 2 - div, 3 - mul\n");
scanf("%d",&op);

printf("Enter 2 numbers\n");
scanf("%d %d",&var1,&var2);

现在有

a[op](var1,var2);

相应地定义您的功能。例如

int add(int x,int y)
{
  return x+y ;
}

等等。