主题:calculator——“buf”: 未声明的标识符?
[code=c]
// calculator11.cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"
#include <iostream>
#include<cstdlib>
#include<cctype>
using namespace std;
//函数声明
void eatspace(char *str);
double expr(char *str);
double term(char *str,int &index);
double number(char *str,int &index);
//定义常量
const int MAX=80;
int _tmain(int argc, _TCHAR* argv[])
{
char [color=Red]buf[/color][MAX]={0};
cout<<endl
<<"Welcome to Calculator!"
<<endl
<<"Enter am expression, or an empty line to quit:"
<<endl;
for(;;){
cin.getline(buf,sizeof buf);
eatspace(buf);
if(!buf[0]) //如果字符串为空,则返回
return 0;
cout<<"\t="<<expr(buf) //否则,输出表达式的值
<<endl
<<endl;
}
return 0;
}
//消除输入表达式的空格键
void eatspace(char *str)
{
int i,j;
for(i=0;i<MAX;i++){
if(buf[i]!=' '){
buf[j]=buf[i];
j++;
}
}
return;
}
//识别表达式函数,然后返回其值
double expr(char *str)
{
double value=0.0;
int index=0;
value=term(str,index);
for(;;){
switch(buf[index])
{
case '\0': //当扫描到字符串最后一个字符时,返回其值
return value;
case '+' :
value+=term(str,index); //当扫描到‘+’字符时,则加上后面的乘除项
break;
case '-' :
value-=term(str,index); //当扫描到‘-’字符时,则减去后面的乘除项
break;
default :
cout<<endl
<<"There is a error!"
<<endl;
exit(1);
}
}
}
//识别乘除项函数,然后返回其值
double term(char *str,int &index)
{
double value=0.0;
value=number(str,index);
while(buf[index]='*'||buf[index]='/'){ //当扫描到‘*’或‘、’字符时,则乘以或除以后面的数字项
if(buf[index]='*')
value*=number(str,++index);
if(buf[index]='/')
value/=number(str,++index);
}
return value;
}
//识别数字项函数,然后返回其值
double number(char *str,int &index)
{
double value=0.0;
while(isdigit(buf[index])){ //如果是数字,那么循环扫描下一个字符
value=10*value+(buf[index]-'0');
index++;
}
if(buf[index]!='.') //如果不是小数点,那么返回此时的数字项
return value;
double factor=1.0;
while(isdigit(buf[index++])){ //如果是小数点,那么循环扫描下一个字符
factor*=0.1;
value=value+factor*(buf[index]-'0');
}
return value;
}
[/code]
---------------------------------------------------------------------------------------------------------------------------------
1>------ 已启动生成: 项目: calculator11, 配置: Debug Win32 ------
1>生成启动时间为 2011/6/29 18:54:50。
1>PrepareForBuild:
1> 正在创建目录“c:\users\mstbiy\documents\visual studio 2010\Projects\calculator11\Debug\”。
1>InitializeBuildStatus:
1> 正在创建“Debug\calculator11.unsuccessfulbuild”,因为已指定“AlwaysCreate”。
1>ClCompile:
1> stdafx.cpp
1> calculator11.cpp
1>c:\users\mstbiy\documents\visual studio 2010\projects\calculator11\calculator11\calculator11.cpp(47): error C2065: “buf”: 未声明的标识符
1>c:\users\mstbiy\documents\visual studio 2010\projects\calculator11\calculator11\calculator11.cpp(48): error C2065: “buf”: 未声明的标识符
1>c:\users\mstbiy\documents\visual studio 2010\projects\calculator11\calculator11\calculator11.cpp(48): error C2065: “buf”: 未声明的标识符
1>c:\users\mstbiy\documents\visual studio 2010\projects\calculator11\calculator11\calculator11.cpp(64): error C2065: “buf”: 未声明的标识符
1>c:\users\mstbiy\documents\visual studio 2010\projects\calculator11\calculator11\calculator11.cpp(89): error C2065: “buf”: 未声明的标识符
1>c:\users\mstbiy\documents\visual studio 2010\projects\calculator11\calculator11\calculator11.cpp(89): error C2065: “buf”: 未声明的标识符
1>c:\users\mstbiy\documents\visual studio 2010\projects\calculator11\calculator11\calculator11.cpp(89): fatal error C1903: 无法从以前的错误中恢复;正在停止编译
1>
1>生成失败。
1>
1>已用时间 00:00:03.71
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
这里为什么会提示buf[]未声明呢?
// calculator11.cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"
#include <iostream>
#include<cstdlib>
#include<cctype>
using namespace std;
//函数声明
void eatspace(char *str);
double expr(char *str);
double term(char *str,int &index);
double number(char *str,int &index);
//定义常量
const int MAX=80;
int _tmain(int argc, _TCHAR* argv[])
{
char [color=Red]buf[/color][MAX]={0};
cout<<endl
<<"Welcome to Calculator!"
<<endl
<<"Enter am expression, or an empty line to quit:"
<<endl;
for(;;){
cin.getline(buf,sizeof buf);
eatspace(buf);
if(!buf[0]) //如果字符串为空,则返回
return 0;
cout<<"\t="<<expr(buf) //否则,输出表达式的值
<<endl
<<endl;
}
return 0;
}
//消除输入表达式的空格键
void eatspace(char *str)
{
int i,j;
for(i=0;i<MAX;i++){
if(buf[i]!=' '){
buf[j]=buf[i];
j++;
}
}
return;
}
//识别表达式函数,然后返回其值
double expr(char *str)
{
double value=0.0;
int index=0;
value=term(str,index);
for(;;){
switch(buf[index])
{
case '\0': //当扫描到字符串最后一个字符时,返回其值
return value;
case '+' :
value+=term(str,index); //当扫描到‘+’字符时,则加上后面的乘除项
break;
case '-' :
value-=term(str,index); //当扫描到‘-’字符时,则减去后面的乘除项
break;
default :
cout<<endl
<<"There is a error!"
<<endl;
exit(1);
}
}
}
//识别乘除项函数,然后返回其值
double term(char *str,int &index)
{
double value=0.0;
value=number(str,index);
while(buf[index]='*'||buf[index]='/'){ //当扫描到‘*’或‘、’字符时,则乘以或除以后面的数字项
if(buf[index]='*')
value*=number(str,++index);
if(buf[index]='/')
value/=number(str,++index);
}
return value;
}
//识别数字项函数,然后返回其值
double number(char *str,int &index)
{
double value=0.0;
while(isdigit(buf[index])){ //如果是数字,那么循环扫描下一个字符
value=10*value+(buf[index]-'0');
index++;
}
if(buf[index]!='.') //如果不是小数点,那么返回此时的数字项
return value;
double factor=1.0;
while(isdigit(buf[index++])){ //如果是小数点,那么循环扫描下一个字符
factor*=0.1;
value=value+factor*(buf[index]-'0');
}
return value;
}
[/code]
---------------------------------------------------------------------------------------------------------------------------------
1>------ 已启动生成: 项目: calculator11, 配置: Debug Win32 ------
1>生成启动时间为 2011/6/29 18:54:50。
1>PrepareForBuild:
1> 正在创建目录“c:\users\mstbiy\documents\visual studio 2010\Projects\calculator11\Debug\”。
1>InitializeBuildStatus:
1> 正在创建“Debug\calculator11.unsuccessfulbuild”,因为已指定“AlwaysCreate”。
1>ClCompile:
1> stdafx.cpp
1> calculator11.cpp
1>c:\users\mstbiy\documents\visual studio 2010\projects\calculator11\calculator11\calculator11.cpp(47): error C2065: “buf”: 未声明的标识符
1>c:\users\mstbiy\documents\visual studio 2010\projects\calculator11\calculator11\calculator11.cpp(48): error C2065: “buf”: 未声明的标识符
1>c:\users\mstbiy\documents\visual studio 2010\projects\calculator11\calculator11\calculator11.cpp(48): error C2065: “buf”: 未声明的标识符
1>c:\users\mstbiy\documents\visual studio 2010\projects\calculator11\calculator11\calculator11.cpp(64): error C2065: “buf”: 未声明的标识符
1>c:\users\mstbiy\documents\visual studio 2010\projects\calculator11\calculator11\calculator11.cpp(89): error C2065: “buf”: 未声明的标识符
1>c:\users\mstbiy\documents\visual studio 2010\projects\calculator11\calculator11\calculator11.cpp(89): error C2065: “buf”: 未声明的标识符
1>c:\users\mstbiy\documents\visual studio 2010\projects\calculator11\calculator11\calculator11.cpp(89): fatal error C1903: 无法从以前的错误中恢复;正在停止编译
1>
1>生成失败。
1>
1>已用时间 00:00:03.71
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
这里为什么会提示buf[]未声明呢?