我正在尝试为我们使用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);
}
答案 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 ;
}
等等。