当我编译以下C函数/程序时,我得到"missing ';' before 'type' 'remainder' : undeclared identifier"
之类的错误 - 这个函数出了什么问题?
#include <stdio.h>
void conversionTo(int number,int base) {
if(number==0)
return;
int remainder=number%base;
conversionTo((number/base),base);
if(remainder<10)
printf("%c",'0'+remainder);
else
printf("%c",'a'-10+remainder);
}
int main() {
conversionTo(int number,int base);
return 0;
}
答案 0 :(得分:3)
我不是C专家,但从很久以前的经验来看,我相信你不能在函数中间声明变量。
此外,还不清楚你要对函数/打印语句做什么。
试试这个:
#include <stdio.h>
void conversionTo(int number,int base) {
int remainder=number%base;
if(number==0)
return;
conversionTo((number/base),base);
if(remainder<10)
printf("%c",'0'+ remainder); // Through the way ASCII works that gives the ASCII rep
// of the remainder.
else
printf("%c",'a'-10+remainder); // Hex digits (A-F).
}
int main() {
conversionTo(/*Any number here*/10, /*any base number here*/2);
return 0;
}
答案 1 :(得分:2)
您需要定义变量,然后才能使用它们。 所以这个:
int main() {
conversionTo(int number,int base);
return 0;
}
应该成为这个:
int main(void)
{
int number;
int base:
number = 47;
base = 11;
conversionTo(number, base);
return 0;
}
非C99兼容编译器也不喜欢在上下文中间声明变量:
void conversionTo(int number,int base) {
if(number==0)
return;
int remainder=number%base; /* this would fail. */
conversionTo((number/base),base);
要解决这个问题,请打开另一个背景:
void conversionTo(int number,int base) {
if(number==0)
return;
{
int remainder=number%base;
conversionTo((number/base),base);
if(remainder<10)
printf("%c",'0'+remainder);
else
printf("%c",'a'-10+remainder);
}
}
答案 2 :(得分:1)
你正在调用你的函数错误 - 以这种方式传递参数:
conversionTo(2,2); // assuming you want to convert 2 to binary
或
int number = 123, base = 10;
conversionTo(number, base); // note this is not the same number and base as in the definition of your conversionTo function
完整代码:
#include <stdio.h>
void conversionTo(int number,int base)
{
if(number==0)
return;
int remainder=number%base;
conversionTo((number/base),base);
if(remainder<10)
printf("%c",'0'+remainder);
else
printf("%c",'a'-10+remainder);
}
int main()
{
conversionTo(2,2); // assuming you want to convert 2 to binary
return 0;
}
使用功能时有三件事:
函数声明/原型 - 函数的原型是:
void conversionTo(int ,int );
功能定义:
void conversionTo(int number,int base /* Parameter list*/)
{
// your functionality
}
将函数传递给函数的函数调用:
conversionTo(2,2);
声明conversionTo(int number,int base);
只是重新声明它。试试这个,即使这将编译:
int main()
{
printf("Hello World");
int main();
}
答案 3 :(得分:1)
您必须使用值或变量调用函数,而不是声明:
conversionTo(123, 10); // using constant value
或
int number = 123, base = 10; // variable declaration
conversionTo(number, base); // using variable
答案 4 :(得分:1)
conversionTo(int number, int base)
是声明函数可以采用哪些参数的语法。要实际调用该函数,您需要省略该类型(假设您有相应名称的变量)
int number = 5;
int base = 10;
conversionTo(number, base); // <-- no int here!
或者您可以直接使用数字:
conversionTo(5, 10);
答案 5 :(得分:0)
函数声明number
中的函数定义base
和void conversionTo(int number, int base)
是传递给它的值在函数内部的名称。因此,如果您致电conversionTo(2,5)
,则会在函数内部看到2 number
,而5将被视为base
。
如果你想使用变量而不是内容来调用函数,你可以这样做:
int main()
{
int base = 2;
int number = 5;
conversionTo(base, number);
return 0;
}
在这个令人困惑的例子中,变量base
和value
分别具有值2和5。但是当你将它们传递给函数时,它内部的值将是number = 2和base = 5.这表明这些变量实际上是不同的,尽管名称相同。
答案 6 :(得分:0)
您应该使用$ CC -std = c99进行编译,以便在块中间声明变量。
(参见规范6.8节)
答案 7 :(得分:0)
声明“int remainder”必须在块中的任何语句之前。 声明可能有一个初始化器,就像你在这里一样。
你可以这样做:
void conversionTo(int number,int base) {
if (number > 0) {
int remainder...
}
}
因为该功能不适用于负数。
修复例程中的其他错误:
void conversionTo(int number,int base)
{
if(number>=0&&base>0&&base<=36)
{
int remainder=number%base;
number/=base;
if(number>0)conversionTo(number,base);
printf("%c",(remainder<10)?'0'+remainder:'a'+remainder-10);
}
}
如果数字为零,则会打印0,如果需要,只会递归。