Nick_is_asking Ответов: 3

Проблема возврата символа из функции -> C


- Привет!!!
Я хочу вернуть символ из функции ,но этого никогда не происходит.
Я даю вам весь код(400+ строк).
См.функцию give_char() и функцию start_game, где я вызываю функцию give_char ().
Если вы запускаете этот код ,то когда программа переходит в scanf() из give_char() ,команда никогда не запускается и программа заканчивается там.
Когда я запускаю только give_char() в main, все хорошо.
Я не знаю, что у меня другое/неправильное (мне кажется, все хорошо)

Спасибо...

Что я уже пробовал:

Код[^]

Patrice T

Попробуйте найти способ вставить ваш код в вопрос.
Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.

3 Ответов

Рейтинг:
2

Richard MacCutchan

Просто слишком много проблем, чтобы перечислить их в своем коде. Вы используете %s форматирование элементов управления в scanf и printf при работе с односимвольными переменными; вы должны использовать %c Вы также должны указать длину поля назначения при использовании scanf("%s", array_name) Вам также необходимо использовать символы конца строки там, где это необходимо, чтобы избежать их чтения как фактических данных . Я настоятельно рекомендую вам пойти и прочитать документацию MSDN по scanf для получения полной информации о том, как ее использовать.


Рейтинг:
2

Nick_is_asking

Я не понимаю.
У меня есть эти 2 строки кода в функции start_game() :

char my_letter = give_char();
printf("%c" , my_letter);

а потом я вызываю start_game() в main() и не работает.

Если я напишу эти команды
char my_letter = give_char();
printf("%c" , my_letter);
в main(а не в start_game) это работает.


char give_char()
{
    char character;
    printf("\nGive a character: ");
    //fgets(character , 50 , stdin);
    scanf("%c" , &character);
    return character;
}



это для смеха и слез.Я не могу понять, почему эта простая вещь не работает.
Я просто не могу.
Странность.


Nick_is_asking

Я нашел его.
Мне пришлось написать scanf(" %c" , &character);
с пробелом перед %c.
Не знаю почему...

Рейтинг:
0

OriginalGriff

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

Итак, теперь вы входите во вторую стадию разработки (на самом деле это четвертая или пятая, но вы перейдете к более ранним стадиям позже): тестирование и отладка.

Начните с рассмотрения того, что он делает, и как это отличается от того, что вы хотели. Это важно, потому что это дает вам информацию о том, почему он это делает. Например, если программа предназначена для того, чтобы позволить пользователю ввести число, а он удваивает его и печатает ответ, то если ввод / вывод был таким:

Input   Expected output    Actual output
  1            2                 1
  2            4                 4
  3            6                 9
  4            8                16
Тогда совершенно очевидно, что проблема заключается в бите, который удваивает его - он не прибавляет себя к себе или умножает его на 2, он умножает его на себя и возвращает квадрат входного сигнала.
Таким образом, вы можете посмотреть на код, и очевидно, что он находится где-то здесь:
int Double(int value)
   {
   return value * value;
   }

Как только у вас появится идея, что может пойти не так, начните использовать отладчик, чтобы выяснить, почему. Поместите точку останова в первую строку метода и запустите приложение. Когда он достигнет точки останова, отладчик остановится и передаст управление вам. Теперь вы можете запускать свой код построчно (так называемый "одноступенчатый") и просматривать (или даже изменять) содержимое переменных по мере необходимости (черт возьми, вы даже можете изменить код и повторить попытку, если вам это нужно).
Подумайте о том, что должна делать каждая строка кода перед ее выполнением, и сравните это с тем, что она действительно делала, когда вы использовали кнопку "Step over" для выполнения каждой строки по очереди. Он сделал то, что вы ожидали? Если да, то переходите к следующей строке.
Если нет, то почему? Чем это отличается?
Надеюсь, это поможет вам определить, в какой части этого кода есть проблема и в чем она заключается.
Это навык, и его стоит развивать, поскольку он помогает вам как в реальном мире, так и в развитии. И, как и все навыки, он только улучшается при использовании!