2017-02-16 9 views
2

Я пытаюсь решить проблему, в которой я должен взять указатель на символ и сохранить электронное письмо, а затем передать этот указатель на функцию, чтобы я мог проверить, есть ли какие-либо специальные символов во входной строке. Вот кодКак передать символ указателю на функцию

#include <stdio.h> 
#include <stdlib.h> 

void verify(char** em) 
{ 
    char *z = *em; 

    while(*z) 
    { 
     printf("%c", *z++); 
    } 

    while(*z != '\n') 
    { 
     if(*z == 'a') 
     { 
      printf("present"); 
      *z++; 
     } 
     else 
     { 
      printf("not present"); 
     } 
    } 
} 

int main() 
{ 
    int count = 0; 
    char *email = malloc(sizeof(char) * 100); 

    printf("enter the email id\n"); 
    scanf("%100s", email); 

    while(*email) 
    { 
     printf("%c", *email++); 
    } 

    verify(&email); 
    return 0; 
} 

Всякий раз, когда я передать указатель на символ для моей функции проверить() и попытайтесь напечатать строку, я не получаю нужный выход.

Как я могу использовать эту функцию, чтобы проверить, действительно ли введенное письмо ввода или нет? Я пытаюсь найти индекс «@» и проверять символы перед @ и после @, но я не знаю, как я могу хранить индекс «@», потому что это не массив.

+0

Вы должны правильно форматировать и отступать свой код перед тем, как делать что-либо еще. –

+1

Не связано с вопросом сообщения, просто хочу указать, что у вас может быть утечка памяти. Для каждой части 'malloc', пожалуйста, убедитесь, что вы ее бесплатно. –

+0

Ваш 'scanf()' должен быть 'scanf ("% 99s ", email)', поскольку ширина поля не включает завершающий нуль. Кроме того, почему вы печатаете строки с нулевым завершением по одному символу за раз? – Dmitri

ответ

1

Задача 1

Линии

while(*email) 
    printf("%c",*email++); 

двигаться email так, что она указывает на конец строки в конце цикла. Вам необходимо отслеживать исходное значение email.

char* it = email; 
while(*it) 
    printf("%c",*it++); 

Задача 2

Вы не deallocating памяти вы получили в вызове malloc.

Задача 3

Линии

while(*z) 
    printf("%c",*z++); 

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

Задача 4

И потом, у вас есть

if(*z=='a') 
    { 
    printf("present"); 
    *z++; 
    } 

Это является проблемой. z не перемещается, если *z не является 'a'.

verify Исправлена:

// You don't need the input to be of type char** 
void verify(char* em) 
{ 
    char *z = em; 
    while(*z) 
     printf("%c",*z++); 

    // Reset where z points 
    z = em; 

    while(*z!='\n') 
    { 
     if(*z=='a') 
     { 
     printf("present"); 
     } 
     else printf("not present"); 

     // Move z regardless of the value of *z 
     ++z; 
    } 
} 

Исправлена ​​main:

int main() 
{ 
    int count=0; 
    char *email=malloc(sizeof(char)*100); 
    printf("enter the email id\n"); 
    scanf("%100s",email); 

    char* it = email; 
    while(*it) 
     printf("%c",*it++); 

    // Just use email, not &email 
    verify(email); 

    // Deallocate memory 
    free(email); 

    return 0; 
} 
+0

может объяснить, почему вы использовали это // Сброс, где z указывает z = em; – nitishy2j

+0

Перед циклом 'while',' z' указывает на первый символ строки. После выхода цикла цикл 'z' указывает на последний символ строки. Используя 'z = em;', мы снова создаем 'z' для первого символа строки. –

+0

, пожалуйста, изучите этот вопрос, я отредактировал его – nitishy2j

0

не использовать * ++ там?. вы не можете быть уверены, что это похоже на * ?,? ++ или *?, (*?) ++.

void verify(char* em){ 
char *z = em; 
while(*z) 
printf("%c",*(z++));//do you realy need to print the email more than once? 
//in the verify() and the main() 
// Reset where z points 
z = em; 

    while(*z!='\n'&&*z!='\0') 
    { 
    if(*z=='a') 
    { 
    printf("present"); 
    } 
    else printf("not present"); 

    // Move z regardless of the value of *z 
    ++z; 
    } 
    } 


int main() 
{ 
int count=0; 
char *email=malloc(sizeof(char)*100); 
printf("enter the email id\n"); 
scanf("%100s",email); 

char* it = email; 
while(*it) 
    printf("%c",*(it++)); 

// Just use email, not &email 
verify(email); 

// Deallocate memory 
free(email); 

return 0; 
} 

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

  • Нет связанных вопросов^_^