1

我正在使用带有 gcc 的 ubuntu 12.04 lts。此 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;
}
4

2 回答 2

3

您的函数调用中缺少括号。这个:

ret = get_int ;

应该:

ret = get_int();

此外,两者getchar()putchar()处理int, 不是char

如果您的编译器没有警告您这些事情,尤其是第一个,那么您需要一个新的,或者您需要将警告级别调高。

此外,正如 Gangadhar 指出的那样,现在您正在读取一个整数并将其作为字符打印出来,因此输入68将输出D,例如,在使用 ASCII 的系统上。这可能是,但可能不是,你想要的行为,所以如果不是,请putchar()用调用替换你printf()

于 2013-09-07T14:12:37.417 回答
1

以下这两种说法不正确

  ret = get_int ;
  putchar(ret);  

更正它们如下

    ret = get_int () ;
   printf("%d\n", ret);

in the above ret =get_int ; this says compiler to store the pointer into an integer(the function name it self points to function) And at that place you need to make call to function.here your function did not take require any arguments so your call should have Empty parenthesis preceded by function name. and the second one is you are using putchar function to print integer value.you need to use printf with %d specifier.

于 2013-09-07T14:21:09.143 回答