Witam. Piszę pierwszego posta na tym forum.
Mam problem odnośnie do tablicy typu char.
O to kod:
#include <conio.h>
#include <string.h>
using namespace std;
const int MAX_NUMBERS = 9;
struct PersonalData {
private:
char name[20];
int number[MAX_NUMBERS];
bool winner;
public:
int setNumber() {
char znak;
int i=0;
do {
znak = getch();
if(znak >= 48 && znak <= 57){
printf("%c", znak);
number[i] = znak;
} else
i--;
i++;
} while(i != MAX_NUMBERS);
cout<<"\n";
return 0;
};
char setName() {
char znak;
int i=0;
do {
znak = getch();
if(znak >= 97 && znak <= 122) {
printf("%c", znak);
name[i] = znak;
} else
i--;
i++;
} while(znak != 13 && znak != 27);
return 0;
};
public:
void getNumber() {
for(int i=0; i<MAX_NUMBERS; i++)
printf("%c", number[i]);
};
void getName() {
for(int i=0; i<strlen(name); i++) {
printf("%c", name[i]);
}
};
};
#include <iostream>
#include "PersonalData.h"
#include "Display.h"
using namespace std;
int main()
{
struct PersonalData personalData[1];
personalData[1].setName();
personalData[1].getName();
personalData[1].setNumber();
personalData[1].getNumber();
}
Gdy wpisuję imię jest wszystko w porządku natomiast gdy mam wyświetlić wychodzi mi imię i dodatkowo jakieś śmieci(nie zawsze ale w większości przypadków).
Dla trybu numerycznego nie ma takiego problemu.
Np:
Wpisuję imię: Janek
Wypisuje mi: Janek>**&#@ (czasem jest w porządku i nie wyświetla śmieci.)
Wpisuję numer: 123456789
Wypisuje mi: 123456789
Dla numeru jest okey a dla tekstu pojawia się ten problem.
Nie wiem w ogóle jak go rozwiązać. Czemu wyświetla mi śmieci jak jest zastosowana funkcja strlen?
Próbowałem rozwiązania takiego:
void getName() {
for(int i=0; i<strlen(name); i++) {
if(name[i] >= 97 && name[i] <= 122)
printf("%c", name[i]);
}
};
Ale tutaj może zdarzyć się że śmieć będzie np literą n,a,b,s,y,p.