Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么这个ANSIC程序没有给出结果?_C - Fatal编程技术网

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

为什么这个ANSIC程序没有给出结果?,c,C,我将ubuntu 12.04 lts与gcc一起使用。此ANSI C代码在编译时没有错误或警告,但当我尝试执行.out文件时,会出现一些垃圾值。 谁能告诉我,这个程序有什么问题吗 #include <stdio.h> int get_int(void); int main (void) { int ret; ret = get_int ; putchar(ret); printf("\n"); return 0 ; } int get_i

我将ubuntu 12.04 lts与gcc一起使用。此ANSI C代码在编译时没有错误或警告,但当我尝试执行.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;
}
#包括
int get_int(void);
内部主(空)
{
int ret;
ret=获取int;
putchar(ret);
printf(“\n”);
返回0;
}
int get_int(无效)
{
int输入;
char ch;
while((scanf(“%d”,&input))!=1)
{
而((ch=getchar())!='\n')
putchar(ch);
printf(“不是整数。\n请输入一个”);
printf(“整数值,如25,-178或3:”);
}
返回输入;
}

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

ret=get\u int

应该是:

ret=get_int()

另外,
getchar()
putchar()
都处理
int
,而不是
char

如果你的编译器没有警告你这些事情,特别是第一个,那么你要么需要一个新的,要么需要提高警告级别


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

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

ret=get\u int

应该是:

ret=get_int()

另外,
getchar()
putchar()
都处理
int
,而不是
char

如果你的编译器没有警告你这些事情,特别是第一个,那么你要么需要一个新的,要么需要提高警告级别


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

以下两条语句不正确

  ret = get_int ;
  putchar(ret);  
更正如下

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

在上面的
ret=get\u int这表示编译器将指针存储到一个整数(它自身指向函数的函数名)中,并且在该位置您需要调用函数。在这里,您的函数不需要任何参数,因此您的调用前面应该有空括号和函数名。第二个是使用
putchar
函数打印整数值。需要使用
printf
%d
说明符

以下两种说法不正确

  ret = get_int ;
  putchar(ret);  
更正如下

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

在上面的
ret=get\u int这表示编译器将指针存储到一个整数(它自身指向函数的函数名)中,并且在该位置您需要调用函数。在这里,您的函数不需要任何参数,因此您的调用前面应该有空括号和函数名。第二个是使用
putchar
函数打印整数值。需要使用
printf
%d
说明符

对于此类警告,请使用
-Wextra
标志。我认为
-Wall
应该足够了,但如果您愿意,可以同时尝试这两种方法。gcc 4.7.2实际上会在没有任何标志的情况下为缺少的参数发出警告,在这种特殊情况下,但我绝对赞成使用
-Wall
-Wextra
。对于此类警告,请使用
-Wextra
标志。我认为
-Wall
应该足够了,但如果您愿意,可以同时尝试这两种方法。gcc 4.7.2实际上会为缺少任何标志的paren发出警告,在这种特殊情况下,但我绝对赞成使用
-Wall
-Wextra