2012-12-03 1 views
0

J'ai essayé d'utiliser,vérification d'un membre de struct être seulement alphabétique

if(isalpha(card[i].name)) 
... 

mais il est dit que je ne peux pas l'utiliser avec le type char voici mon code: Ceci est la struct:

struct firm { 
unsigned egn; 
char name[80]; 
char lastname[80]; 
char department[80]; 
unsigned salary; 
}card[100]; 

C'est la fonction où je veux faire le chèque si seulement les lettres puis de continuer:

void enter() 
{ 
int i, n; 
char temp[80]; 
do{ 
    cout<<"Enter how many workers you want to add: ";cin>>n; 
}while(!(n>0 && n<101)); 
for(i=top;i<n;i++) 
{/*ЕГН + проверка*/ 
    cout<<"Enter EGN: ";do{ 
    cin>>temp; 
if((strlen(temp)!=10)) 
    cout<<"Enter EGN: "; 
}while(strlen(temp)!=10); 
card[i].egn = (unsigned) atoi (temp); 
/*Име Фамилия*/ 
cout<<"Enter name(only letters): ";cin>>card[i].name; 
cout<<"Enter lastname(only letters): ";cin>>card[i].lastname; 
cout<<"Enter department: ";cin>>card[i].department; 
cout<<"Enter salary: ";cin>>temp; 
card[i].salary = (unsigned) atoi (temp); 
} 
} 

Quand je essayez d'utiliser ce genre de code:

cout<<"Enter name(only letters): ";do{ 
cin>>card[i].name; 
if(isalpha(card[i].name)) 
.....; 

et il est dit que je ne peux pas utiliser les ombles dans int (isalpha utilise int?)

+2

le type de '' name' n'est pas char'. Vous devriez accorder plus d'attention au message erro du compilateur. Si vous le faites, vous remarquerez que le type en question est 'char [80]', pas 'char'. –

+0

Alors comme je dis, je dois faire une boucle pour chaque chiffre ?? comment puis-je le faire – Koleto

Répondre

2

Vous devez boucle sur tous les caractères de la chaîne, isalpha() teste un seul caractère.

+0

comment puis-je le faire ... quand je tape "Koleto" comment doit être le chèque ... – Koleto

0

Le problème est que le nom lui-même est un tableau de caractères, de sorte que vous devez tester chaque chose comme chaque élément ceci:

..... 
cout<<"Enter name(only letters): ";do{ 
cin>>card[i].name; 
bool bIsAlpha = true; 
for (int j = 0; j < strlen(card[i].name); ++j) 
{ 
    if(!isalpha(card[i].name[j])) 
    { 
    bIsAlpha = false; 
    break; 
    } 
} 
if (bIsAlpha) 
{ 
    .....; 
} 
+0

dans cette ligne "pour (int j = 0; j Koleto

+0

J'ai fait un petit changement (remplacé par" strlen (nom) "avec" strlen (carte [i] .name) '.. Mais je ne suis pas sûr de ce que vous demandez – StevieG

1

Vous ne pouvez pas utiliser isalpha sur un tableau char ensemble, uniquement sur les caractères individuels. Pour vérifier que tous les caractères dans un tableau char est alphabétique, vous pouvez utiliser l'algorithme std::all_of:

auto name_begin = std::begin(card[i].name); 
auto name_end = std::end(card[i].name); 
bool name_alpha = std::all_of(name_begin, std::find(name_begin, name_end, '\0'), std::isalpha); 
if (name_alpha) { 
    std::cout << "It's alphabetical!" << std::endl; 
} 

Si vous utilisez un compilateur sans nécessaire support C++ 11, vous pouvez faire:

char* name_begin = card[i].name; 
bool name_alpha = std::all_of(name_begin, name_begin+std::strlen(name_begin), std::isalpha); 
if (name_alpha) { 
    std::cout << "It's alphabetical!" << std::endl; 
} 

Ensuite, la manière ennuyeuse sans utiliser les algorithmes de la bibliothèque standard:

bool name_alpha = true; 
for (char* character = card[i].name; *character != '\0'; character++) { 
    if (!std::isalpha(*character)) { 
    name_alpha = false; 
    break; 
    } 
} 
if (name_alpha) { 
    std::cout << "It's alphabetical!" << std::endl; 
} 
+0

Désolé, je ne peux pas comprendre la signification de ce code - pouvez-vous s'il vous plaît le faire dans mon code (j'ai essayé de le mettre juste après mon code mais voici quelques erreurs que je ne peux pas comprendre aussi) Merci – Koleto

+0

Les chances sont que vous n'avez pas de support C++ 11 ou vous ne l'avez pas activé Essayez l'édition Assurez-vous d'avoir '' et '' inclus. –

Questions connexes