我写了这个程序来建造一个钻石。问题是,当我编译程序时,它会抛出错误
build2.c :(。text + 0x5):未定义对`get_input'的引用
collect2:错误:ld返回1退出状态
我已经尝试了几个小时来弄清楚究竟是什么问题(例如,如果有拼写错误或类似的东西),但函数调用看起来相同。我试图重命名它,把它写成原型和实现,似乎没有任何效果。是否有一个我没有看到的问题?
//Define prior to main
int is_valid(int);
int get_input(void);
void print_pattern(int);
//Main
int main(void){
int diamond_size;
//diamond_size = get_input();
//value from get imput method used for diamond size
print_pattern(get_input());
return 0;
}
void print_pattern(int size){
int length, num, i, j;
//beginning of new diamond
printf("\n");
//Define each integer to work in layout of diamond
//First for loop fans out
for(i=1; i <= size; i += 2){
length = size-i+1;
num = 1;
printf("%*s", length," ");
for(j = 0; j < i; j++){
printf("%d ", num);
num++;
}
printf("\n");
}
//second for loop fans in
for(i=size-2; i >= 1; i -= 2){
length = size-i+1;
num = 1;
printf("%*s", length," ");
for(j = 0; j < i; j++){
printf("%d ", num);
num++;
}
printf("\n");
}
int is_valid(int value){
int rem;
//uses remainder to determine if it is odd or even; an even number will not have a reaminder in this case
rem = value % 2;
if (rem == 0){
printf("You've entered a even number. Please try again.\n");
return (0);
}
//greater than 9 cnd
if (value > 9){
printf("You have entered a number greater than 9. Please try again.\n");
return (0);
}
//less than 1 cnd
if (value < 1){
printf("You have entered a number less than 1. Please try again.\n");
return (0);
}
return (1);
}
int get_input()
{
int cont, number, valid;
cont = 1;
while (cont = 1)
{
printf("Enter an odd number less than 9 and greater than 0 < ");
scanf("%d", &number);
valid = is_valid(number);
if (valid == 1)
{
cont = 0;
}
}
return number;
}
}
答案 0 :(得分:2)
你似乎有嵌套函数;这是(a)a non-standard GCC extension,(b)我假设嵌套get_input()
函数的范围是封闭函数,而不是文件范围。解决方案是将get_input()
移动到文件范围。在print_pattern()
结束时添加额外的}
,并删除文件末尾的最终}
。
另外,请格式化您的代码 - 这些天大多数IDE都有可以选择整理它们,并且通过正确的缩进,您可能更早地看到了问题。
哦,作为额外的错误修复,你也有get_input()
:
while (cont = 1)
这将永远是真的 - 改为使用它:
while (cont == 1)
答案 1 :(得分:1)
函数print_pattern没有在适当的位置终止,而是在文件的最末端:
void print_pattern(int size){
...
... end of the loop
}
... more functions
...
... end of print_pattern
}
这导致定义嵌套函数而不是全局级别。
将块缩进是一般的好习惯,在这种情况下你会很快意识到这个错误。