2013-12-19 4 views
0

Что я хочу сделать: пользователь вводит строку; например: 12345,44,55,66. Я создал функцию для проверки того, являются ли первые 5 символов не цифрами, тогда программа выведет сообщение об ошибке, а если 6-й символ не ,, программа также выведет сообщение об ошибке. Моя проблема в том, что я хочу, чтобы программа перестала читать коды, если обнаружена ошибка (не будет напечатана, если есть ошибка). Итак, как я могу остановить программу от продолжения чтения кодов? Вот что я написал до сих пор.Как заставить программу перестать читать коды?

#include <stdio.h> 
#include <string.h> 
#include <ctype.h> 

void checkstudentID(char temp[]); 

main() 
{ 
    char temp[10000]; 
    char m0[10000]; 
    gets(temp); 
    checkstudentID(temp); 
    printf("%s",temp);   
    return 0; 
} 

void checkstudentID(char temp[]) 
{ 
    int i; 
    for (i=0;i<6;i++) 
    { 
     if (isdigit(temp[i]) == 0) 
     { 
      printf("Student ID must contain only integers.\n"); 
      return 0; 
     } 
    } 
    if (temp[6] != *(",")) 
    { 
       printf("Student ID must contain only 6 integers.\n"); 
       return 0; 
    } 
} 
+0

Вы не можете вернуть какое-либо значение из функции 'void', используйте' exit (EXIT_SUCCESS); 'и' int main (void) ' –

+0

. Какой вклад вы дали? –

+0

Не означает захват потока, но может кто-нибудь объяснить, как '* (", ")' интерпретируется компилятором c? Это первый раз, когда я вижу такой синтаксис, и компилятор вообще не жаловался!?!? – yasouser

ответ

1

Это хорошая привычка, Не заставляйте точки множественного выхода. Поэтому, соответственно, нехорошо использовать exit() в подфункции. Я предложил бы, чтобы подфункции возвращали значения, чтобы сообщить их статус главной функции.


#include <stdio.h> 
#include <string.h> 
#include <ctype.h> 
int checkstudentID(char temp[]); 
void main() 
{ 
    char temp[10000]; 
    char m0[10000]; 
    gets(temp); 
    switch(checkstudentID(temp)) 
    { 
     case 0: printf("%s",temp);break; 
     case 1: printf("Student ID must contain only integers.\n"); break; 
     case 2: printf("Student ID must contain only 6 integers.\n"); break; 
    } 
} 

int checkstudentID(char temp[]) 
{ 
    int i; 
    int ID_status = 0; 
    for (i=0;i<6;i++) 
     if (0==isdigit(temp[i])) 
     { 
      ID_status = 1; 
      break; 
     } 
    if (temp[6]!=',') ID_status = 2; 
    return ID_status; 
} 
0

Используйте exit(), чтобы прекратить чтение кодов. Вы можете сделать как

void checkstudentID(char temp[]) 
{ 
int i; 
for (i=0;i<6;i++) 
{ 
    if (isdigit(temp[i])==0) 
    { 
     printf("Student ID must contain only integers.\n"); 
     exit(0); 
    } 
} 
if (temp[6]!=',')) 
{ 
      printf("Student ID must contain only 6 integers.\n"); 
      exit(0); 
} 
} 
+0

Я все еще изучаю C, не могли бы вы объяснить, почему ваше последнее выражение if сравнивается с использованием указателей, а не равенства символов? Благодаря! – kevinsa5

-2

Другой способ чтения только 6 символов является:

//gets(temp); 
scanf("%6s", temp); 

Даже если пользователь вводит более 6 символов, temp будет иметь только 6 символов сохранены.

+0

Помогите объяснить, почему голосуете? – yasouser

+0

Пожалуйста, оставьте комментарий о том, почему вы голосуете в ответ. Оригинальный вопрос: «Итак, как я могу остановить программу от продолжения чтения кодов?». Мое решение состоит в том, чтобы принять только первые 6 символов ввода, потому что идентификатор студента длится 6 символов. Предложение заключается в замене 'gets (temp);'. – yasouser

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