我正在使用uccntu 12.04 lts和gcc。此ANSI C代码在编译时没有错误或警告,但是当我尝试执行a.out文件时,会出现一些垃圾值。 谁能告诉我,这个程序有什么问题?
#include <stdio.h>
int get_int(void);
int main (void)
{
int ret;
ret = get_int ;
putchar(ret);
printf("\n");
return 0 ;
}
int get_int(void)
{
int input;
char ch;
while ((scanf("%d", &input)) != 1)
{
while ((ch = getchar()) != '\n')
putchar(ch);
printf(" is not an integer.\nPlease enter an ");
printf("integer value, such as 25, -178, or 3: ");
}
return input;
}
答案 0 :(得分:3)
您在函数调用中缺少括号。这样:
ret = get_int ;
应该是:
ret = get_int();
此外,getchar()
和putchar()
合作int
,而非char
。
如果你的编译器没有警告你这些事情,特别是第一个,那么你需要一个新的,或者你需要打开它的警告级别。
另外,正如Gangadhar指出的那样,现在你正在读取一个整数并将其打印为一个字符,因此输入68
将输出D
,例如,在使用的系统上ASCII。这可能是,但可能不是您想要的行为,因此如果不是putchar()
,请将printf()
替换为{{1}}。
答案 1 :(得分:1)
以下两个陈述不正确
ret = get_int ;
putchar(ret);
按以下方式更正
ret = get_int () ;
printf("%d\n", ret);
在上面的ret =get_int ;
中,这表示编译器将指针存储为一个整数(它自己指向函数的函数名称)并且在那个地方你需要调用function.here你的函数没需要任何参数,所以你的调用应该有空括号前面的函数名称。第二个是您使用putchar
函数打印整数值。您需要将printf
与%d
说明符一起使用。