乔宽 发表于 2022-1-7 20:18:30

Linux中编译c文件

在Linux中编译c文件,gcc test.c -o test && ./test ,到这时就动不了了,我就只能按了ctrl + c,结束程序了
求大神帮我解答一下,要是文件有错误,那要显示错误信息啊,不动了是怎么回事?

jackz007 发表于 2022-1-7 20:27:47

      本来是 2 条命令,非要搞成一条,出了问题都扯不清楚。
      像下面这样,第一条是编译,第 2 条是执行,一条一条地输入,看看究竟卡在第 1 还是第 2 条命令上。
gcc test.c -o test
./test

大马强 发表于 2022-1-7 20:32:06

可以试试管道符{:10_256:}

乔宽 发表于 2022-1-7 20:38:13

jackz007 发表于 2022-1-7 20:27
本来是 2 条命令,非要搞成一条,出了问题都扯不清楚。
      像下面这样,第一条是编译,第 2...

大佬,这样我也试了,其实卡在了第二条命令上了,第一条通过了

jackz007 发表于 2022-1-7 20:41:00

乔宽 发表于 2022-1-7 20:38
大佬,这样我也试了,其实卡在了第二条命令上了,第一条通过了

       那基本可以肯定是你代码的问题了,把 C 代码文本贴出来。注意,不要贴图片。

乔宽 发表于 2022-1-7 20:47:43

jackz007 发表于 2022-1-7 20:41
那基本可以肯定是你代码的问题了,把 C 代码文本贴出来。注意,不要贴图片。

#include <stdio.h>

int main(){
int y,m,d;
int x;
scanf("%d%d%d",&y,&m,&d);
scanf("%d",&x);
for(int i=0;i<x;i++){
d+=1;
switch(m) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
if(d>31){
d=1;
m+=1;
}
break;
case 12:{
if(d>31){
d=1;
m+=1;
}
if(m==13){
m=1;
y+=1;
}
break;
}
case 6:
case 9:
case 11:
if(d>30){
d=1;
m+=1;
}
break;
case 2:
if(y%4==0&&y%100!=0||y%400==0){
if(d>29){
d=1;
m+=1;
}
}else{
if(d>28){
d=1;
m+=1;
}
}
}
}
printf("%d-%d-%d\n",y,m,d);
return 0;
}
在Dev-C++中还能正常运行的

jackz007 发表于 2022-1-7 21:10:08

乔宽 发表于 2022-1-7 20:47
在Dev-C++中还能正常运行的

D:\00.Excise\C>g++ -o x x.c

D:\00.Excise\C>x
2022 1 1 35
2022-2-1

D:\00.Excise\C>      在我这里是可以运行的,只是结果不对,给出你的测试样例。

乔宽 发表于 2022-1-7 21:25:43

jackz007 发表于 2022-1-7 21:10
在我这里是可以运行的,只是结果不对,给出你的测试样例。

谢谢大佬

jackz007 发表于 2022-1-7 22:26:54

本帖最后由 jackz007 于 2022-1-7 23:46 编辑

乔宽 发表于 2022-1-7 21:25
谢谢大佬

#include <stdio.h>

int md(int y , int m)
{
      int d = {31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31} , r ;
      r = d                                                                ;
      if((! (y % 4) && y % 100) || ! (y % 400)) r ++                              ;
      return r                                                                  ;
}

int main(void)
{
      int d , m , x , y , dx                                                      ;
      scanf("%d%d%d%d" , & y , & m , & d , & x)                                 ;
      for(d += x , dx = md(y , m) ; d > dx ; dx = md(y , m)) {
                d -= dx                                                             ;
                m ++                                                                ;
                if(m > 12) {
                        y ++                                                      ;
                        m = 1                                                       ;
                }
      }         
      printf("%d-%d-%d\n" , y , m , d)                                          ;
}
      编译、运行实况:
D:\00.Excise\C>g++ -o x x.c

D:\00.Excise\C>x
2022 1 1 31
2022-2-1

D:\00.Excise\C>x
2022 1 1 35
2022-2-5

D:\00.Excise\C>

tomok 发表于 2022-1-7 22:29:54

来学习 了

fmydedie 发表于 2022-1-8 07:53:41

感觉是程序问题 死循环?

1molHF 发表于 2022-1-8 10:09:24

来学习 了

1molHF 发表于 2022-1-8 10:11:46

{:10_256:}

can_xin 发表于 2022-1-8 10:29:47

开始学习

伽羅~ 发表于 2022-1-8 11:07:43

{:10_279:}

hrpzcf 发表于 2022-1-8 11:18:16

估计你的程序进入死循环了,./test是运行编译好的程序的意思

qwe~@ 发表于 2022-1-8 22:12:36

{:10_281:}{:10_281:}{:10_281:}
页: [1]
查看完整版本: Linux中编译c文件