2016-11-29 7 views
2

文字列名の最初の文字をスキップする以外は正常に動作します。誰も私が見ていないことを説明することはできますか?Cプログラムは文字列内の最初の文字をスキップします

#include "stdio.h" 
/* 
*BN 
*/ 
int main(void) { 
// Disable stdout buffering 
//setvbuf(stdout, NULL, _IONBF, 0); 

struct data { 
    char name[40]; 
    char street[50]; 
    char city[30]; 
    char state[3]; 
    char zip[6]; 
    float salary; 
}; 

struct data p = { 
scanf("%s %s %s %s %s %f", &p.name, &p.street, &p.city, &p.state, &p.zip, &p.salary) 
}; 

printf(" Name:%s\n Street:%s\n City:%s\n State:%s\n Zipcode:%s\n Salary:%.2f", p.name, p.street, p.city, p.state, p.zip, p.salary); 
return 0; 
} 
+6

を。 ['scanf'についてもっと読む(http://en.cppreference.com/w/c/io/fscanf)、それが返すものに細心の注意を払う。 –

+0

構造体の初期化が適切ではありません。チェック:http://stackoverflow.com/questions/330793/how-to-initialize-a-struct-in-accordance-with-c-programming-language-standards – Ehsan

+0

私は構造体がcでどのように初期化されていないか、私は同意します。しかし、構造体が最初の文字を除いて正しく初期化される理由を誰かが説明できますか? – MayurK

答えて

2

struct data p;は、あなたがscanfがそうであるように、あなたの構造を初期化します。

struct data p; 
scanf("%s%s%s%s%s%f", &p.name, &p.street, &p.city, &p.state, &p.zip, &p.salary); 

You can check some struct stuff here.

+1

それはありがとう!、病気構造体の適切な初期化を検討し、さらにscanfの理解。皆さんありがとう! – rando

2

こんにちは、あなたは

この使用あなたの構造を初期化するために間違った方法行っている:それはあなたが構造体を初期化する方法はありませんので

#include "stdio.h" 
/* 
*BN 
*/ 
int main(void) { 
    // Disable stdout buffering 
    //setvbuf(stdout, NULL, _IONBF, 0); 

    struct data { 
     char name[40]; 
     char street[50]; 
     char city[30]; 
     char state[3]; 
     char zip[6]; 
     float salary; 
    }; 

    struct data p;//Dont Initialize it here! 
    printf("Please Enter Name Street City State Zip Salary:"); 
    scanf("%s %s %s %s %s %f", &p.name, &p.street, &p.city, &p.state, &p.zip, &p.salary); 

    printf(" Name:%s\n Street:%s\n City:%s\n State:%s\n Zipcode:%s\n Salary:%.2f\n", p.name, p.street, p.city, p.state, p.zip, p.salary); 
    return 0; 
} 
関連する問題