2013-11-02 4 views
0

Вот часть описания задания: Программа должна остановить , принимая ввод, когда пользователь вводит слово. Предположим, что ни слова нет длиной более 20 букв.Проверка строки ввода пользователя

Я должен проверить, что если слово более 20 символов, ваше сообщение получит сообщение об ошибке и снова должно будет повторить. Также, когда я набираю текст, программа должна заканчиваться. Я не уверен, как правильно писать эти утверждения. Когда я запускаю его и ввести более 20 символов он дает мне ошибку - Expression: L("Buffer is too small" &&0)

Вот мой код до сих пор:

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#define MAXCHAR 20 

int charcount(char []); 

int main() 
{ 
    char message[MAXCHAR]; 
    int numofchar; 

    printf("Enter any word to display how many characters that word has.\nA word CANNOT be more than 20 charatcers long.\n"); 
    printf("When you are finished type the word done.\n"); 
    do 
    { 
     printf("\nEnter a word: "); 
     gets_s(message, MAXCHAR); 
     numofchar = charcount(message); 
     while (numofchar > MAXCHAR) 
     { 
      printf("The word enterd is more then 20 characters. Try again.\n"); 
      printf("Enter a word: "); 
      gets_s(message, MAXCHAR); 
     } 
     printf("The word %s has %d characters.\n", (message),numofchar); 
    } while ((message,MAXCHAR) != 'done'); 

    printf("\nEnd of program.\n"); 
    system ("PAUSE"); 
    return 0; 
} 


int charcount (char list[]) 

{ 
    int i, count = 0; 

    for(i = 0; list[i] != '\0'; i++) 
    count++; 

    return(count); 

} 
+0

это также дает мне ту же ошибку, когда я типа сделал или это будет просто рассчитывать слово сделано и не закончить программу, когда я пытаюсь писать иначе. – user2948755

+1

Вы можете использовать strlen() вместо charcount(). Кроме того, «while ((сообщение, MAXCHAR)! = 'Done);' должен быть «while (strcmp (message,« done »));« –

+1

Если вам нужно разрешить 20 символов в слове, вам нужно 21 символ в массиве, чтобы разрешить нулевой терминатор. Также 'gets_s()' делает я не подозреваю, что вы используете «scanf()» или один из своих братьев и сестер с «% 20s» в качестве спецификации преобразования. –

ответ

0

Чтобы обнаружить ошибку, вам просто нужно проверить возвращаемое значение get_s:

http://msdn.microsoft.com/en-us/library/5b5x9wc7%28v=vs.90%29.aspx

int main() 
{ 
    char message[MAXCHAR], *s; 
    int numofchar; 
    ... 
    do 
    { 
     printf("\nEnter a word: "); 
     s = gets_s(message, MAXCHAR); 
     if (!s) { 
      << some error handling code goes here >> 
     ... 
+0

Я исправил свой массив, чтобы он имел место для нулевого терминатора, но когда я помещаю более 20 символов, все равно дает мне это сообщение об ошибке. Я попытался точно указать то, что вы положили тоже. – user2948755

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