Проблема с персонажем в C - PullRequest
       0

Проблема с персонажем в C

0 голосов
/ 01 сентября 2011

Я новичок в C, и мне трудно понять, почему этот цикл не читает тип данных моего персонажа.Что не так с моим кодом?

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

int main()
{
    /************
     Declaration
    ************/

    int admin = 0; // Counts and administrates the loop
    char userInput; // Accounts for the name entered

    printf("Enter your  first name to the screen :");
    scanf("%c", &userInput);

    while (admin < 100)
    {
          printf("Hello, my name is %c!\n", userInput);
          admin++;
    }

    system("pause");
    return 0;

Ответы [ 2 ]

3 голосов
/ 01 сентября 2011
char userName[100];

и

scanf("%99s", userName);

и

printf("Hello, my name is %s!\n", userName);

Если ваше имя пользователя не длиннее одного символа!

C a char этоодин символ. Очевидно, вам нужна C «строка», поэтому массив символов (или вы могли бы malloc фрагмент памяти, но мы будем игнорировать это). Итак, вы объявляете массив символов (я помещаюдлина 100), но тогда вы должны использовать %s с scanf и printf. В качестве идентификатора вам не нужно &, чтобы получить адрес массива)

Кто-то еще(Ричард) поставил %99s вместо %s, потому что это не позволяет scanf читать имена, длина которых превышает 99 символов.Это может вызвать серьезные проблемы!Он был ОЧЕНЬ прав!И я благодарю его.: -)

Я добавлю, что, я надеюсь, вы знаете, что строка C "заканчивается на ноль" (последний символ должен быть \0) (a 0).По этой причине массив из 100 символов может содержать только строку длиной 99 (поскольку терминатор 0 не учитывается).

0 голосов
/ 01 сентября 2011

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

, когда вы используете %c для scanf(), он может принимать любое значение ввода из 1 символа.будь то число, алфавит или последняя нажатая клавиша ввода, равная \n.Он также может принимать значения буфера.Так что в этом случае я отличаюсь от scanf() и %d, в которых scanf() ждет числа и не принимает алфавит.Но для scanf() и %c он может принимать даже значения буфера.Таким образом, чтобы преодолеть эту проблему, вы можете использовать эти три метода

1) вы можете объявить встроенную функцию fflush(stdin); непосредственно перед scanf().вот так

           printf("Enter your  first name to the screen :");
           fflush(stdin);
           scanf("%c", &userInput);

тогда ваша программа будет работать нормально.И не забудьте включить заголовочный файл <stdlib.h>.эта функция содержится в этом. Теперь я расскажу вам недостатки этого метода.я читал во многих местах, что этот подход уменьшает переносимость программы, поэтому ANSI не рекомендует этот способ.

2) вы можете объявить массив символов вместо символьной переменной.тогда scanf().это также отлично работает.

3) этот самый простой.когда вы пишете заявление вроде этого scanf("%c", &userInput);, я предлагаю вам написать заявление вроде этого scanf(" %c", &userInput); Так вы можете обнаружить разницу?На самом деле пробел добавляется непосредственно перед %c, и теперь программа работает.

Вы можете попробовать все три метода, и если один из них не работает, пожалуйста, сообщите мне

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...