鱼C论坛

 找回密码
 立即注册
查看: 1003|回复: 5

[已解决]c语言入门问题

[复制链接]
发表于 2020-7-22 17:51:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请问为什么编译不成功?
1 #include <stdio.h>
  2
  3 int main()
  4 {
  5
  6 int i;
  7 char j;
  8 float k;
  9
10 i=123;
11 j='c';
12 k=3.14;
13
14 printf("size of int is %d\n",sizeof(int));
15 printf("size of char is %d\n",sizeof(char));
16 printf("size of k is %d\n",sizeof k);
17  return 0;
18 }
19
下面是错误提示:
xinruiliu  ~/1/1-1$   gcc 1.c
1.c:14:30: warning: format specifies type 'int' but the argument has type
      'unsigned long' [-Wformat]
printf("size of int is %d\n",sizeof(int));
                       ~~    ^~~~~~~~~~~
                       %lu
1.c:15:31: warning: format specifies type 'int' but the argument has type
      'unsigned long' [-Wformat]
printf("size of char is %d\n",sizeof(char));
                        ~~    ^~~~~~~~~~~~
                        %lu
1.c:16:28: warning: format specifies type 'int' but the argument has type
      'unsigned long' [-Wformat]
printf("size of k is %d\n",sizeof k);
                     ~~    ^~~~~~~~
                     %lu
3 warnings generated.
最佳答案
2020-7-22 22:25:35
这不是错误。是三个警告,这个没啥问题
warning是警告,error才是错误
这个警告可以不消除,不影响执行,但是若想消除也是可以的。
warning中已经给出了警告的原因,sizeof的返回值是unsigned long类型,格式化应该用%lu,而你用的是%d。
你将三个%d都改为%lu即可。
#include <stdio.h>


int main() {
    int i;
    char j;
    float k;

    i = 123;
    j = 'c';
    k = 3.14;

    printf("size of int is %lu\n", sizeof(int));
    printf("size of char is %lu\n", sizeof(char));
    printf("size of k is %lu\n", sizeof k);
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-22 17:56:41 | 显示全部楼层
我这里没有问题,建议用 Dev - C++ 进行编译,Dev - C++ 下载地址:https://sm.myapp.com/original/De ... GCC_4.9.2_Setup.exe
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-22 17:58:27 | 显示全部楼层
代码是:
#include <stdio.h>


int main() {
    int i;
    char j;
    float k;

    i = 123;
    j = 'c';
    k = 3.14;

    printf("size of int is %d\n", sizeof(int));
    printf("size of char is %d\n", sizeof(char));
    printf("size of k is %d\n", sizeof k);
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-22 22:21:47 | 显示全部楼层
应该是编译器的原因,你这个代码只是有一些可以忽略的小问题,
帮你改了改
#include <stdio.h>

int main(){

        int i;
        char j;
        float k;
        i = 123;
        j = 'c';
        k = 3.14f;
        printf("size of int is %d\n", (int)sizeof(int));
        printf("size of char is %d\n", (int)sizeof(char));
        printf("size of k is %d\n", (int)sizeof (k));
        return 0;

}
这样应该就不会报错了。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-22 22:25:35 | 显示全部楼层    本楼为最佳答案   
这不是错误。是三个警告,这个没啥问题
warning是警告,error才是错误
这个警告可以不消除,不影响执行,但是若想消除也是可以的。
warning中已经给出了警告的原因,sizeof的返回值是unsigned long类型,格式化应该用%lu,而你用的是%d。
你将三个%d都改为%lu即可。
#include <stdio.h>


int main() {
    int i;
    char j;
    float k;

    i = 123;
    j = 'c';
    k = 3.14;

    printf("size of int is %lu\n", sizeof(int));
    printf("size of char is %lu\n", sizeof(char));
    printf("size of k is %lu\n", sizeof k);
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-23 02:23:19 | 显示全部楼层
#include <stdio.h>

int main()
{

   int i;
   char j;
   double k;
  
   i = 123;
   j = 'c';
   k = 3.14;

   printf("size of int is %d\n",sizeof(int));
   printf("size of char is %d\n",sizeof(char));
   printf("size of k is %d\n",sizeof k);
   return 0;
}

将 float 型改为 double 型,告警提示就没有了,运行的结果是:

size of int is 4
size of char is 1
size of k is 8
Press any key to continue
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-13 10:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表