Возможный дубликат:
Программа не ждет ввода пользователя с помощью scanf («% c», & yn);
Я только начал программировать на C, и тут всплывает что-то странное (чего я не встречал в C ++).
В моем заголовочном файле я объявляю переменную (см. onemoretime
в коде для .h
файла), значение которой позже устанавливается с использованием пользовательского ввода через scanf()
. По какой-то причине условные выражения, использующие переменную, не работали должным образом, либо возвращали бесконечно повторяющийся результат, либо просто ничего не делали. Я установил несколько точек останова и обнаружил, что при первом вызове onemoretime
в функции main()
значение onemoretime
по какой-то причине установлено на \n
.
Это не то значение, которое scanf()
должно распознавать, но ввод обрабатывается как новая строка (очевидно). Когда я ввожу y
, что должно вызвать else if
условие и вернуться к началу main()
, отладчик Xcode просто говорит: error: 'y' is not a valid command.
Вот мой .h
файл:
#ifndef C1_Header_h
#define C1_Header_h
float num1, num2;
char op, onemoretime;
#endif
... А вот соответствующий код из файла .c
:
#include <stdio.h>
#include <math.h>
#include "Header.h"
int main(int argc, const char * argv[])
{
printf("Enter a two-number calculation below:\n");
while (1)
{
scanf("%f%c%f", &num1, &op, &num2);
// addition
if (op == '+')
{
printf("%f\n", num1+num2);
printf("\nDone. Would you like to solve another math problem (y/n)?\n");
scanf("%c", &onemoretime);
while (1)
{
if (onemoretime == 'n')
{
printf("Ok. Terminating program.");
return 0;
}
else if (onemoretime == 'y')
{
// loop back to start main function
}
}
}
}
// rest of code, irrelevant here
}
Если это вообще фактор, то при наведении курсора на переменную onemoretime
в Xcode (с отображением ее основных свойств) каждый экземпляр переменной после первоначального объявления в файле заголовка показывает значение \n
.
Что я делаю неправильно? Как значение onemoretime
может быть установлено пользователем, а не программой, прежде чем пользователь сможет до него добраться?
scanf()
, который, в свою очередь, не делает того, что вы думаете. - person   schedule 02.02.2013