2015-04-29 2 views
-2

Моя основная цель для этого кода - захватить вход пользователей и делать все, что он хочет делать с представленными мной вариантами, но я застрял: когда я компилирую, я могу только ввести слово, и программа перестает работать.Почему моя программа перестает работать при вводе типа?

Я понятия не имею, где я делаю ошибку.

мой код:

#include <stdio.h> 
#include <string.h> 
#define MAX_STRING_LENGTH 100 

void grab_user_input(void); 
void load_menu(void); 
void Count_the_letters(void); 

int main(void) 
{ 
    grab_user_input(); 
    return 0; 
} 

void grab_user_input(void) 
{ 
    char word; 
    { 
     printf("Please enter a single word (25 characters or less): \n"); 
     scanf("%s", &word); 
     printf("Thanks! The word you entered is: %s\n", word); 
    } 

    void load_menu(void) 
    { 
     int choice; 
     do 
     { 
      int choice; 
      printf("\n(:===Menu====:)\n"); 
      printf("1. Count_the_letters\n"); 
      printf("2. Count_the_vowels\n"); 
      printf("3. Reverse_the_word\n"); 
      printf("4. Check_if_palindrome\n"); 
      printf("5. Enter_a_new_word\n"); 
      printf("6.  Exit\n"); 
      scanf("%d", &choice); 
      switch (choice) 
      { 
      case 1: Count_the_letters(); 
      break; 

      } 
     } while (choice != 3); 
    } 

    void Count_the_letters(void) 
    { 
     char S[MAX_STRING_LENGTH]; 
     int count; 

     count = 0; 

     do { 
      printf("string:\t"); 
      scanf("%s",S); 
      if (strcmp(S,"exit") != 0) 
       ++count; 
     } while (strcmp(S,"exit") != 0); 

     printf("word count:\t%d\n", count); 
    } 

    return 0; 
} 
+1

Это ваш точный код? Откуда вы учитесь? –

+0

да, это мой код, который я изучаю, сам по себе. @iharob –

ответ

2
scanf("%s", &word); 

нужен массив символов для чтения данных. &word имеет место только для одного символа.

Вы столкнулись с неопределенным поведением.

Использование

char word[26]; 
scanf("%25s", &word); 
+0

спасибо @R Sahu, он работал, я действительно облекся. –

0

Причина заключается в том, что вы передаете адрес в char переменной, объявленной и scanf() пытается записать два байта, где он подходит только один.

char word 

это объявляет char переменную, она может содержать один байт

scanf("%s", &word); 

whill требуется по крайней мере один байт для пустой струны '\0'.

Но также вы указали много функций внутри void grab_user_input(void), что не является допустимым стандартом c, оно может работать с некоторым компилятором, но это не стандарт.

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