2015-08-26 3 views
-2

Я пытаюсь проверить, содержит ли значение, введенное для password_entered, цифру в любом месте.Несоответствие символов в программе C

Однако, я бегу в несколько ошибок:

  1. Компилятор жалуется IM пропусканием int здесь, когда я действительно пытался пройти char:

    зсапЕ (» % s ", password_entered);

  2. И эта линия жалуется, что я использую конфликтующих типов:

    символ CD (символ password_entered)

(по какой-то причине этот код не будет правильно выглядеть код - любая помощь , очень ценится).

int main() 
{ 

    char password_entered[20]; //max is 20 char 

    char CD(char password_entered[]); 

    printf("Please enter a password"); 
    scanf("%s", password_entered); 

    if (CD(password_entered)){ 
     printf("You entered a password with a digit!"); 
    } 

    return 0; 
} 

char CD(char password_entered) { 
    for(i=0; i<=strlen(password_entered); i++){ 
     if(isdigit(password_entered)){ 
      //contains a digit 
      return '1'; 
     } 
     else{ 
      return 0; 
     } 
    } 

} 

ОБНОВЛЕНО КОД: Я все еще получаю сообщение об ошибке на: обугливается CD(char password_entered) { от «ошибки: ожидается, ';', '', или ')'

Что я делаю. ? то здесь

Спасибо

+0

Макс. 20 символов? Нет, это не так! Макс. 1 символ. Вам нужен массив. – Bathsheba

+0

Можете ли вы ответить каким-то кодом, я был бы признателен. – Jshee

+0

Почему вы передаете строку как аргумент, когда его тип параметра функции char? – ameyCU

ответ

1

Прежде всего, объявляет password_entered, как массив символов:

char password_entered[20]; 

Вы передаете строку в CD:

while(CD(password_entered) != 1);

и захватывая значения в полукоксе:

char CD(char password_entered)

password_entered - массив символов, а не символ. Это должно быть char CD(char[] password_entered)

И ваша последняя функция:

if(isdigit(password_entered)) 
{ 

//contains a digit 

return '1'; 

} 

else{ 

    return '1'; 

    } 

должен быть

if(isdigit(password_entered[i])){ 
      //contains a digit 
      return '1'; 
     } 
     else{ 
      return '1'; 
     } 

Это как ваш код должен выглядеть следующим образом:

int main() 
{  
    //int password_min=6; 

    char password_entered[20]; //max is 20 char 

    //functions 
    bool CD(char password_entered); 
    // It should be declared above 


    // do{ 
    //  printf("Please enter a password"); 
    //  scanf("%s", password_entered); // you are reading in an array, which is not correct 
    // } 
    // while(CD(password_entered) != 1); 

    printf("Please enter a password"); 
    scanf("%s", password_entered); 

    if (CD(password_entered)) 
    { 
     // a password 
    } 


    return 0; 
} 

// Check for digits in password_entered var 
char CD(char[] password_entered) { 
    int flag = 0; 
    for(i=0; i<=strlen(password_entered); i++){ 
     if(isdigit(password_entered)){ 
      //contains a digit 
      return '1'; 
     } 
     else{ 
      flag = 1; 
      break; 
     } 
    } 
    if (flag) 
     return -1; 
    else 
     return 1; 
} 

Редактировать окончательное: Это как ваша программа должна быть:

#include <stdio.h> 
#include <string.h> 
int main() 
{ 

    char password_entered[20]; //max is 20 char 

    //functions 
    char CD(char password_entered[]); 


    //do{} 
    printf("Please enter a password"); 
    scanf("%s", password_entered); 
    //} 
    //while(CD(password_entered) != 1); 

    if (CD(password_entered)){ 
     printf("You entered a password with a digit!"); 
    } 

    return 0; 
} 

// Check for digits in password_entered var 
char CD(char password_entered[]) { 
    int i; 
    for(i=0; i<=strlen(password_entered); i++){ 
     if(isdigit(password_entered)){ 
      //contains a digit 
      return '1'; 
     } 
     else{ 
      return 0; 
     } 
    } 

} 
+0

Я немного отказался от кода, но эта строка: «char CD (char [] password_entered) {« выдает ошибку «ожидаемый»; «,», «или»). Любая идея? – Jshee

+0

Кроме того, строка: bool checkForDigits (char password_entered); бросает «ожидаемый символ», но аргумент является типом «char *» – Jshee

+0

. Смотрите мой обновленный код и ошибку. – Jshee

1

прототип функции имеет тип bool -. bool CD(char password_entered);

, и вы определяете его с типом char - char CD(char password_entered)

Вот почему вы получаете ошибку. Держите один тип для функции CD (по мне следует использовать char CD()).

Другое problems-

char password_entered; //max is 20 char 

Declaread в char. В этом scanf("%s", password_entered); спецификатор %s ожидает char *, и вы передаете char.

for(i=0; i<=strlen(password_entered); i++){ 

Функция strlen предназначена для расчета длины строки. Вы не можете использовать его для персонажа.

Вам необходимо объявить password_entered как массив с соответствующим размером.Что-то вроде этого -

char password_entered[20]; 
scanf("%19s", password_entered); //so that 1 place remains for null character else code will give UB 
-1
#include <stdio.h> 
#include <string.h> 
#include <stdbool.h> 
#include <ctype.h> 
#include <stdlib.h> 

#define PASS_SIZE 20 

char pass[PASS_SIZE + 1]; /* 1 for \0 */ 
bool is_ok(char*); 

int main(int argc, char *argv[]){ 

    int t = 0; 
    do{ 

     printf("Enter password : "); 
     gets(pass);     /* try to use fgets */  
            /* for bound checking */ 
    }while(!is_ok(pass)); 

    exit(EXIT_SUCCESS); /* done */ 

} // int main 

bool is_ok(char *pass){ 

    for(register int i = 0; i < strlen(pass); i++) 
     if(!isdigit(pass[i])) 
      return false; 

    return true; 

} // check that all are digits 
+1

Чтобы ответить на вопрос, не требуется проходить всю процедуру чтения, – vonbrand

+1

Просьба описать ваше решение .... – Kushal

Смежные вопросы