鱼C论坛

 找回密码
 立即注册
查看: 802|回复: 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即可。
  1. #include <stdio.h>


  2. int main() {
  3.     int i;
  4.     char j;
  5.     float k;

  6.     i = 123;
  7.     j = 'c';
  8.     k = 3.14;

  9.     printf("size of int is %lu\n", sizeof(int));
  10.     printf("size of char is %lu\n", sizeof(char));
  11.     printf("size of k is %lu\n", sizeof k);
  12.     return 0;
  13. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> 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 | 显示全部楼层
代码是:
  1. #include <stdio.h>


  2. int main() {
  3.     int i;
  4.     char j;
  5.     float k;

  6.     i = 123;
  7.     j = 'c';
  8.     k = 3.14;

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

使用道具 举报

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

  2. int main(){

  3.         int i;
  4.         char j;
  5.         float k;
  6.         i = 123;
  7.         j = 'c';
  8.         k = 3.14f;
  9.         printf("size of int is %d\n", (int)sizeof(int));
  10.         printf("size of char is %d\n", (int)sizeof(char));
  11.         printf("size of k is %d\n", (int)sizeof (k));
  12.         return 0;

  13. }
复制代码

这样应该就不会报错了。

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

使用道具 举报

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


  2. int main() {
  3.     int i;
  4.     char j;
  5.     float k;

  6.     i = 123;
  7.     j = 'c';
  8.     k = 3.14;

  9.     printf("size of int is %lu\n", sizeof(int));
  10.     printf("size of char is %lu\n", sizeof(char));
  11.     printf("size of k is %lu\n", sizeof k);
  12.     return 0;
  13. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> 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, 2024-4-28 15:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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