PDA

View Full Version : trình biên dịch gcc & TurboC



giangnk
13-12-2007, 10:43 PM
Tại sao 1 bài tập C mình dịch và chạy thành công trên gcc, nhưng khi dịch bài này trên TurboC thì mặc dù ko hề có lỗi nhưng ko thể chạy đc file .exe ở đầu ra?
Phải chăng có sự khác nhau nào đấy giữa 2 trình biên dịch này, Ai biết có thể chỉ rõ cho mình đc ko, và phải sửa code của chương trình như thế nào để có thể chạy đc ở cả 2 trình biên dịch.
Như bài sau đây là 1 ví dụ:


#include<stdio.h>
#include<stdlib.h>
#include<string.h>

typedef struct number {
int cso;
struct number *next;
} number;

int pop(number **top);
void push(number **top,int x);
int notempty(number *top);

int main()
{
number *num1=NULL,*num2=NULL,*sum=NULL;
int i,j,k=0;
char *s;
printf("please input the first number:\n");
gets(s);
for(i=0;i<strlen(s);i++)
{
j=s[i]-'0';
push(&num1,j); //bo qua ktra ki tu ko hop le
}
printf("please input the second number:\n");
gets(s);
for(i=0;i<strlen(s);i++)
{
j=s[i]-'0';
push(&num2,j); //bo qua ktra ki tu ko hop le
}
while(notempty(num1)&&notempty(num2))
{
i=pop(&num1)+pop(&num2)+k;push(&sum,i%10);//pop tu moi stack ra 1 so nguyen , roi cong voi nhau va push phan du khi chia cho 10 vao stack tong
if(i<10) k=0;//bien k co tac dung luu nho khi i>10
else k=1;
}
while(notempty(num1))//khi stack 2 rong truoc
{
i=pop(&num1)+k;push(&sum,i%10);
if(i<10) k=0;
else k=1;
}
while(notempty(num2))//khi satck 1 rong truoc
{
i=pop(&num2)+k;push(&sum,i%10);
if(i<10) k=0;
else k=1;
}
if(k==1) push(&sum,k);
printf("sum of two number were inputed is: \n");
while(notempty(sum))
{
i=pop(&sum);printf("%d",i);
}

return 0;
}

void push(number **top,int x)
{
number *new_t =NULL;
new_t=calloc(1,sizeof(number));//bo qua buoc ktra bo nho
new_t->cso=x;
new_t->next=*top;
*top = new_t;
}
int pop(number **top)
{
number *ptr;
int i;
ptr=*top;
i=(*top)->cso;*top=(*top)->next;free(ptr);
return i;
}
int notempty(number *top)
{
if(top==NULL) return 0;
else return 1;
}

Bài này đã đc post trong diễn đàn nhưng mình xin phép đc post lại cho mọi người dễ ktra điều mình hỏi ở trên.
Lưu ý: gcc là 1 trình biên dịch C,C++ ở trên hệ điều hành Linux hoặc môi trường Linux trên Microsoft Window(Cygwin: http://cygwin.com/)

Kevin Hoang
15-12-2007, 12:48 AM
Dr chạy thử thì phát hiện ra: ừ thì TC kiểm tra cẩn thận hơn một chút,

Bạn sửa lại dòng:
new_t=calloc(1,sizeof(number));
thành
new_t=(number*)calloc(1,sizeof(number));

thì có thể chạy tốt được ở cả 2 trình biên dịch trên.

giangnk
15-12-2007, 07:52 AM
Thực sự ko thấy 1 sự thay đổi nào cả
Mình dùng TC3.0 thì chạy ngon lành ko cần sửa
Nhưng khi dùng TC4.5 thì vẫn chẳng đc gì cả
Admin xem lại hộ với nhé