Kayıtları korumak için küçük bir menü tabanlı program yazmaya çalışıyorum. Kullanıcı, saklanacak toplam kişi sayısı için kullanılacak bir sayı girer (ad, soyadı, skor). Kullanıcı tek bir satıra tümüyle girer, boşluklarla ayrılır ve onları 3 sütuna (ilk ad, soyadı, skor) bölerim, daha sonra presler girer ve maksimum kişi çarpana kadar daha fazla bilgi girmeye devam eder.scanf ve strtok benim için düzgün çalışmıyor
Sorunum, çalıştırdığımda düzgün çalışmıyor; kullanıcı girdisini çalıştırıyor ve kabul ediyor, ancak sadece iki öğrenci için (test durumları için 5'ten büyük rakamlar kullanmam rağmen), program hemen biter (hata kodları yok, sadece biter ...) hatta menüye getirin. Birisi benim kodumda neyin yanlış olduğunu söyleyebilir mi?
int i, j, count, numberPeople, temp, choice;
char people[15][3], tempArr[20];
char *token;
printf("Please indicate number of records you want to enter (min 5, max 15): ");
scanf("%d", &temp);
while ((temp > 15) || (temp < 5)) {
printf("\nNumber not in specified range, try again.\n");
printf("Please indicate number of records you want to enter (min 5, max 15): ");
scanf("%d", &temp);
}
numberPeople = temp;
printf("\nEnter the first name, last name, and grade (put a space in between each): ");
for (i = 0; i < numberPeople; i++) {
fgets(tempArr, 20, stdin);
token = strtok(tempArr, " ");
for (j = 0; j < 3; j++) {
while (token != NULL) {
people[i][j] = *token;
printf("%s\n", token); // this is here to as a test case to see if my data was being stored.
token = strtok(NULL, " ");
}
}
}
EDITED: değişmiş scanf scanf()
Ardından, (j=0; j<3; j++)
bölümü için gerekmez değil fgets()
,
ÇIKIŞ
Please indicate number of records you want to enter (min 5, max 15): 5
Enter the first name, last name, and grade (put a space in between each): firstname1 lastname1 85
firstname1
lastname1
85
firstname2 lastname2 84
firstname2
lastname2
Program ended with exit code: 0
Neden döngü için iç içe geçmiş bir döngü var? – bruceg
'scanf ("% s ")' bir seferde boşluklarla ayrılmış bir 'sözcük' okur. Bütün bir satırı okumak için 'fgets()' ı kullanın ve sonra 'strtok()' ile ayırın. Bilgisayarın okuduktan hemen sonra ne okuduğunu yazdırarak kendinize yardımcı olabilirsiniz; Bu, hata ayıklamanın en temel şeklidir, ancak yine de son derece değerlidir; size neler olduğunu anlatırdı (2 kullanıcı için 6 kelime girersiniz, böylece ikinci sayı okunmadan önce 5'e kadar döngü yapılır). –