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

可是印出來 ---------------->電話數字不對!!!

姓名 電話 地址

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),fpInput)!=NULL)

{

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,customer.address);

}

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),fpInput)!=NULL)

{

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.telephone);

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

Rating
  • 6 years ago
    Favorite Answer

    #define S1 (1+32)

    #define S2 (1+10)

    #define S3 (1+32)

    typedef struct{

    char name[S1];

    long int telephone;

    char address[S3];

    } RECORD;

    RECORD customer;

    for (system("clear");

    (fgets(buffer,sizeof(buffer),fpInput)!=NULL;

    printf("%32s %ld %32s\n", customer.name,customer.telephone, customer.address)){

    for(i=0;i< S1;++i) customer.name[i]=buffer[i];

    for(i=S1-1; isspace(customer.name[i]); customer.name[i--]='\0');

    sscanf(&buffer[S1],"%ld",&customer.telephone);

    for(i=0;i< S3;++i) customer.address[i]=buffer[i+(S1+S2)];

    for(i=S3-1; isspace(customer.address[i]); customer.address[i--]='\0');

    }

    fclose(fpInput);

    }

    2013-11-06 09:47:10 補充:

    出現了2個問題

    1.如果我電話號碼超過202...

    (這是int 的關係 ??) yes

    change "int" to "unsigned long"

    2013-11-06 09:48:57 補充:

    第2個問題:

    // change to

    printf("%34s %12lu %34s\n",...);

    2013-11-06 10:23:44 補充:

    if(strcmp(a,customer.name)==0) printf("yes");

    // you need to make sure that all strings are null terminated.

  • 6 years ago

    prisoner

    我用你提供的程式

    跑出來看到姓名和地址電話都有對其

    可是姓名和地址變成像右對齊不是向左(看起來有點不習慣)

    請問我要改為向左對齊該改哪裡??

    謝謝

  • 6 years ago

    電話欄位宜改用字元,

    如: char telephone[11];

Still have questions? Get your answers by asking now.