2016-10-17 2 views
-1

при вводе числа с плавающей запятой (например, 48.3) результат отображается в 48.00 вместо 48.30, и всякий раз, когда я пытаюсь ввести строку с пустым пространством, программа заканчивается немедленно. Мне нужна помощь, как решить эту проблему?Обработка ввода пользователя

int integer; 
char a[50]; 

float fnum; 
char b[50]; 


printf("Please enter an integer : "); 
scanf("%s",&a); 

integer = atoi(a); 

printf("\nPlease enter a floating-point number : "); 
scanf("%s", &b); 

fnum = atoi(b); 

printf("Output : \n"); 

printf("%i + %.2f = %.2f \n", integer,fnum,(integer+fnum)); 
printf("%i - %.2f = %.2f \n", integer,fnum,(integer-fnum)); 
printf("%i * %.2f = %.2f \n", integer,fnum,(integer*fnum)); 
+1

Введите целое число:.. 'Scanf ("% S", &a);' Да Нет .... – John3136

+1

'atoi' возвращает' int' –

+1

Вы должны начать с хорошей C учебник Спецификатор формата '% s' для' scanf' ожидает совпадения * символьного указателя * и используется для чтения * строк *. Спецификатор формата '% d' используется для целых чисел. Найдите время, чтобы прочитать« man scanf »(вы может потратить часы, фактически переваривая информацию) 'integer = atoi (a);' выглядит довольно бессмысленным, если вы ранее не объявляли int int, где-то. См. [** Как создать минимальный, полный и проверенный пример **] (http://stackoverflow.com/help/mcve). –

ответ

2

Вы преобразования строки b в целое по телефону atoi. Вы хотите, чтобы преобразовать его в число с плавающей точкой, так что используйте atof:

fnum = atof(b); 
+0

Также стоит упомянуть, что 'if (scanf ("% f ", & b) == 1)" обеспечивает способ проверки того, что преобразование в плавающую точку фактически произошло (то же самое верно для 'if (scanf (" % d ", & a) == 1)' для int), в то время как 'atoi' и' atof' ничего не дают в терминах проверки. –

+0

Вы также можете использовать 'strtod()' для преобразования строки в double и (с немного более осторожным), вы можете использовать 'strtol()' и его родственников для преобразования строки в различные типы integer. Все они предоставляют информацию, позволяющую вам узнать, удалось ли преобразование, хотя для интерпретации результатов требуется некоторое внимание, а в случае с 'strtol()', говорящее, что некоторая забота является вежливой!). –

1

atoi возвращает Int. Atof возвращает поплавок.

int integer; 
char a[50]; 

float fnum; 
char b[50]; 


printf("Please enter an integer : "); 
scanf("%s",&a); 

integer = atoi(a); 

printf("\nPlease enter a floating-point number : "); 
scanf("%s", &b); 

fnum = atof(b); 

printf("Output : \n"); 

printf("%d + %.2f = %.2f \n", integer,fnum,(integer+fnum)); 
printf("%d - %.2f = %.2f \n", integer,fnum,(integer-fnum)); 
printf("%d * %.2f = %.2f \n", integer,fnum,(integer*fnum)); 

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