为什么这个Ansi C程序没有给出结果?

时间:2013-09-07 14:08:43

标签: c

我正在使用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;
}

2 个答案:

答案 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说明符一起使用。