2010-11-19 10 views
0

Bir struct nesnesinde birkaç değer depolamaya çalışıyorum ve kullanıcı "yes" yazana kadar istemini tekrarlamak istiyorum. Bunun için bir do-while döngüsü kullanmak istiyorum. Zaten ilk "soyadı" nın okunmasıyla başarısız oldum. Bir şey yazdığımda, program sadece durur (hata yok). Ben, while-while koşuluyla çalışıp çalışmayacağından emin olmadığım için do-while'i kullanmıyorum. senin biçim belirteci olarak
Yapı nesnelerini c ve a-while döngüsünü kullanarak yapılandırma değerleri

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

struct employeelist 
{ 
char last[6]; 
char first[6]; 
int pnumber; 
int salary; 
}; 

int main() 

{ 
struct employeelist employee[5]; 
char check; 

//do 
//{ 
printf("Hello. Please type in the last name, the first name, the personal number and the salary of your employees.\n"); 
printf("Last name: "); 
scanf("%c", employee[1].last); 

printf("First name: "); 
scanf("%c", employee[1].first); 

printf("Personal number: "); 
scanf("%d", &employee[1].pnumber); 

printf("Salary: "); 
scanf("%d", &employee[1].salary); 

printf("You have more employess (yes/no)?: "); 
scanf("%c", &check); 
//}while (scanf("yes")); 

return 0; 
} 
+0

Gerçekten bir soru sormadığının farkındasın değil mi? Bir sürü kod döktün ve "işe yaramadı" dedin. – abelenky

+0

Üzgünüm, bir dahaki sefere daha spesifik olmaya çalışacağım. Ve bu okul için ödev yapıyorum, sadece kendim için öğreniyorum. – Ordo

cevap

2


kullanın %s bir dize almaya çalışıyorsanız. Uzunluğunu 5 ile sınırlamak isteyebilirsiniz, çünkü last ve first için ne kadar alanınız vardır. Yani bu %5s olur. Ayrıca, 5 karakter bir isim için oldukça kısadır.

Başka bir açıklama: C'deki diziler sıfır tabanlı olduğundan, dizinizde employee[1] ikinci employeelist'dur. Bunu bir artış endeksi olan bir döngüde yapmak isterseniz, 0 ile başlayabilirsiniz.

+0

Teşekkür ederiz! Char [uzunluk] için bir değer vermek gerekli mi? – Ordo

+1

@Ordo: Sırala. Çalışma zamanında dize için alan ayırmak istiyorsanız, 'scanf' call 'malloc' olmak için dönüşüm belirtecinde 'a' kullanmanıza izin veren bir GNU uzantısı var. Tabii ki, muhtemelen Microsoft'un C++ derleyicisinde çalışmayacak. Ayrıca malloc'u kendiniz de arayabilirsiniz, ancak ev ödevi için muhtemelen büyük arabellekleri statik olarak ayırmanız ve kullanıcılarınızı biçim belirteci ile tutmanız en kolay yoldur. – nmichaels

+0

Eğer bir karakter dizisinde saklamak istiyorsanız, o zaman mallocing yapmayı planlamıyorsanız, uzunluğu belirtmelisiniz. – prelic

1

Merhaba, char dizisini okurken scanf ("% s", çalışan [1] .last) kullanmalısınız; % s ama değil% c

1

Bu kod ne işe yarar?

scanf("%c", .... 

%c scanf sadece BİR karakteri okumak gerektiğini gösterir.
Bir harf size tam bir ad vermeyecek.

Yeni başlayanlar için %s'a geçmeniz gerekir. çalışmak için tüm birinci dizinin

1
  1. İlk dize için değil 1.
  2. yanlış tanımlayıcı, '0' olacaktır, bu % s olmalıdır.
  3. sadece y/n sonra sadece y evet/hayır dan ekran mesajı değiştirmek/n ve ayrıca == 'y' kontrol etmek garip ederken durumunu değiştirmek isteyen tarafından yineleme yapmak istiyorsanız
  4. || kontrol = = 'Y'. Eğer Bunu döngü içinde eklemeyin type.Why yapmak sadece 5 yapılarını başlatıldı çünkü
  5. kod aslında 5 tekrardan sonra çalışmaz?