C函数中未声明的标识符
当我编译下面的C函数/程序时,我会遇到一些错误,如“type”“remains”之前的“missing”;“undeclared identifier”-这个函数有什么问题C函数中未声明的标识符,c,stack-overflow,C,Stack Overflow,当我编译下面的C函数/程序时,我会遇到一些错误,如“type”“remains”之前的“missing”;“undeclared identifier”-这个函数有什么问题 #include <stdio.h> void conversionTo(int number,int base) { if(number==0) return; int remainder=number%base; conversionTo((number/base),base)
#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)
返回;
整数余数=基数百分比;
转换为((数字/基数),基数);
如果(余数调用函数错误,请按以下方式传递参数:
conversionTo(2,2); // assuming you want to convert 2 to binary
或
完整代码:
#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;
}
功能定义:
将参数传递给函数的函数调用:
语句conversion(int number,int base);
只是重新声明它。尝试此操作,即使这样也会编译:
int main()
{
printf("Hello World");
int main();
}
<>我不是C专家,但从很久以前的经验来看,我相信你不能在函数的中间声明变量。< /P>
此外,还不清楚您试图对函数/打印语句执行什么操作
试试这个:
#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;
}
#包括
无效转换(整数,整数基){
整数余数=基数百分比;
如果(数字==0)
返回;
转换为((数字/基数),基数);
如果(余数必须使用值或变量而不是声明来调用函数:
conversionTo(123, 10); // using constant value
或
函数声明中的函数定义number
和base
无效转换(int-number,int-base)
是传递给它的值在函数内部的名称。因此,如果调用conversion(2,5)
,2将在函数内部被视为编号
,而5将被视为基本
如果要使用变量而不是contants来调用函数,可以执行以下操作:
int main()
{
int base = 2;
int number = 5;
conversionTo(base, number);
return 0;
}
在这个令人困惑的示例中,变量base
和value
分别有值2和5。但是当您将它们传递给函数时,其中的值将是number=2和base=5。这表明这些变量实际上是不同的,尽管它们具有相同的名称。您应该使用$CC-std=c99编译,以能够在块中间声明变量。< /P>
(参见本规范第6.8节)您需要定义变量,然后才能使用它们。
因此:
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);
}
}
void转换(整数,整数基){
如果(数字==0)
返回;
{
整数余数=基数百分比;
转换为((数字/基数),基数);
如果(余数)
是用于声明函数可以采用哪些参数的语法。若要实际调用函数,需要省略类型(假设有相应名称的变量)
声明“int余数”必须位于块中任何语句之前。
声明可能有一个初始值设定项,就像您在这里看到的一样
你可以做:
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);
}
}
void转换(整数,整数基)
{
如果(数字>=0&&base>0&&base0)转换为(数字,基数);
printf(“%c”),(remainderi在“type”“rements”之前会出现诸如missing“;”之类的错误:“type”“rements”:未声明的标识idn很长一段时间不使用c,但我认为不能使用“0”+rements,这将尝试添加一个字符串和一个数字。在调用像conversion(123,8)这样的conversion时,主要需要使用实际数字;在main函数中
:conversion(int number,int base)
应该是conversion(number,base)
。除此之外,您没有在main
函数中声明/初始化这些变量……您必须使用原始的printf(“%c”,“0”+余数)
否则函数将无法运行。@AndrewQ-感谢您的注释-不知何故触发了旧内存-我编辑的注释现在是否更正确了?顺便说一句,我已经使用gcc 4.1.2进行了检查,声明的位置对编译和最终输出没有影响。也许C编译器@ladyd使用的是严格遵守K&R标准的ard禁止添加“动态”声明。发现:gcc test\u me.c-std=c89-pedantic-o test\u me
抛出错误。仅供参考,您可以在C99和C11中使用,但不能在c89中使用。
int main(void)
{
int number;
int base:
number = 47;
base = 11;
conversionTo(number, base);
return 0;
}
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);
}
}
conversionTo(int number, int base)
int number = 5;
int base = 10;
conversionTo(number, base); // <-- no int here!
conversionTo(5, 10);
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);
}
}