C語言 數字跑掉了

有一個input.txt 姓名(32)+(1)空格 電話(10)+(1)空格 地址(32) John Smith 2022233322 300 E.Oak Taipei 10843 Jane Smith 3435245564 200 E.Oak Taipei 10843 John Jorda 3254656555 100 E.Oak Taipei 10843 可是印出來... show more 有一個input.txt

姓名(32)+(1)空格 電話(10)+(1)空格 地址(32)
John Smith 2022233322 300 E.Oak Taipei 10843
Jane Smith 3435245564 200 E.Oak Taipei 10843
John Jorda 3254656555 100 E.Oak Taipei 10843

可是印出來 ---------------->電話數字不對!!!
姓名 電話 地址
John Smith 8189176 300 E.Oak Taipei 10843
Jane Smith 8189176 200 E.Oak Taipei 10843
John Jorda 8189176 100 E.Oak Taipei 10843

可以幫我看看 為何電話數字會跑掉??
謝謝

我的程式如下
#include<stdio.h>
#include<string.h>

int main (void)
{
typedef struct
{
char name[32];
long int telephone;
char address[32];
} RECORD;
RECORD customer;

FILE *fpInput;
FILE *fpt;
fpInput=fopen("input.txt","r");
char buffer[100]={0};
system("clear");

while(fgets(buffer,sizeof(buffer),fpInpu...
{
for(i=0;i<32;i++)
customer.name[i]=buffer[i];
customer.name[31]='\0';
sscanf(buffer,"%ld",&customer.telephone)...
for(i=0;i<32;i++)
customer.address[i]=buffer[i+44];
customer.address[31]='\0';
printf("%32s %ld %32s\n",customer.name,customer.telephone...
}
fclose(fpInput);
}
Update: 謝謝 prisoner

我試著用你的程式跑一遍
出現了2個問題 1.如果我電話號碼超過202 ie 3033545345 ------>2147483647
如果電話號碼 2022233342 or 2023347243 就會正確 (這是int 的關係 ??)
Update 2: 第2個問題
預期答案應該這樣
John Smith 2022233322 300 E.Oak Taipei 10843
Jane Smith 3435245564 200 E.Oak Taipei 10843
John Jorda 3254656555 100 E.Oak Taipei 10843

可是跑出來
John Smith 2022233322 300 E.Oak Taipei 10843
Jane Smith 3435245564 200 E.Oak Taipei 10843 John Jorda

就是跑出來沒有對齊比較亂
Update 3: 這是甚麼原因你知道嗎??
謝謝
Update 4: prisoner 已經解決了
謝謝
Update 5: while(fgets(buffer,sizeof(buffer),fpInpu...
{
for(i=0;i<32;i++)
customer.name[i]=buffer[i];
customer.name[31]='\0';
sscanf(buffer,"%d",&customer.telephone)...
for(i=0;i<32;i++)
customer.address[i]=buffer[i+44];
customer.address[31]='\0';
Update 6: for(i=33;i<43;i++)
buffer1[i-33]=buffer[i];
sscanf(buffer1,"%ld",&customer.telephon...
char a[32]={0};

(我想要scanf("%s",a);-----------把名字輸入如果有吻合 就printf "yes"
可以我用下面的strcmp寫 跑出來都是Segmentation fault)
strcmp寫錯了嗎??
Update 7: if(strcmp(a,customer,name)==0)
{
printf("Yes");
}
Update 8: 不好意思已經超出原來問題的範圍了
如果你知道的話可以提示我一下
謝謝
Update 9: 謝謝東邪兄
可是題目規定 telephone 要用 int 不然我也會想改為char
Update 10: To prisoner

我還是解決不了 strcmp 的問題
我再發問一次好了
謝謝
3 answers 3