![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() ![]() |
![]() |
Jerry |
![]()
Сообщение
#1
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 46 Пол: Женский Репутация: ![]() ![]() ![]() |
программа переводит температуру цельчия в кельвины...
не выходит написать условие на проверку ввода числа типа - "10ю9"
#include "stdafx.h"
#include "stdio.h"
#include "ctype.h"
#define TYPE double
#define INPUT_FORMAT "%lf"
#define T -273.15
int main(int argc, char* argv[])
{
TYPE number;
char dummy,in[256]; // 10л5
printf("Enter the temperature, please(*C):\n");
if (scanf(gets[in],INPUT_FORMAT #" %c", &number, &dummy ) != 1) // проверка на ввод числа
//if (scanf(,INPUT_FORMAT , &number) != 1) - это если просто символы...
{
printf("Expecting a number!\n");
}
else
{
if (number > T)
printf("Temperature in Kelvins: "INPUT_FORMAT" \n", number - T);
else
printf("Temperature in C must be greater than -273.15!\n");
}
return 0;
}
-------------------- Zettai Unmei Mokushiroku
|
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Не понял, почему бы вот так не сделать:
if( sscanf(gets(in), INPUT_FORMAT, &number) != 1) {
printf("Expecting a number!\n");
}
? |
Гость |
![]()
Сообщение
#3
|
Гость ![]() |
потому что если вводить чтото типа "45пр5", оно не выводит ошибку...
|
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Тогда меняй формат ввода:
#define INPUT_FORMAT "%lf%c"
...
if( sscanf(gets(in), INPUT_FORMAT, &number, &dummy) != 1) {
printf("Expecting a number!\n");
}
|
Jerry |
![]()
Сообщение
#5
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 46 Пол: Женский Репутация: ![]() ![]() ![]() |
все , спасибо)
-------------------- Zettai Unmei Mokushiroku
|
Jerry |
![]()
Сообщение
#6
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 46 Пол: Женский Репутация: ![]() ![]() ![]() |
еще одно... как сделать проверку на ввод числа при вычислении формулы. что-то у меня не выходит...>.<
/*
Данная программа выводит таблицу значений, вычисляемых по формуле
Y = cos(x) + arccos(A/B).
Значения А и В вводятся пользователем с клавиатуры, значение х подставляется в
формулу в промежутке от 1 до 360 автоматически. Ответы распределяются в три
колонки. После каждой десятой строки идет выделение чертой.
*/
//Листинг программы:
#include "stdafx.h"// подключение заголовочных файлов(библиотек)
#include <math.h>
#include <iostream.h>
#define Xmin 0 //объявление констант
#define Xmax 360
#define PI 3.14159
int main(int argc, char* argv[])//описание главной функции
{
double y,A,B; //объявление переменных
int x;
cout<<"Vvedite chisla A i B: ";// запрос на ввод чисел А и В
cin>>A;
cin>>B;
for (x=Xmin;x<=Xmax;x++)//вычисление по формуле при х равном от1 до 360
{
y=cos(x*PI/180)+acos(A/B);//вычисление формулы
cout<<x<<")"<<y<<'\t';//вывод значения у
if (x%3==0)//разделение на три колонки
{
cout<<'\n';
}
if (x%30==0)//выделение после каждой десятой строки
{
cout<<"-------------------------------------------------"<<'\n';
}
}
cout<<'\n';
return 0;// возврат из функции
}
-------------------- Zettai Unmei Mokushiroku
|
volvo |
![]()
Сообщение
#7
|
Гость ![]() |
Погоди, в чем здесь проблема? Ты хочешь поймать "не число" ? Сомневаюсь, что тебе это удастся. То есть, поймать - то не проблема. Если введено значение, НЕ начинающееся с числа. А вот если то, что ты ввела, начинается с числа (например, 12RR) - то ... Это тебе не scanf, тут я не знаю, что можно сделать...
Отсечь заведомо неверные значения (которые начинаются с букв) - так: // Очистка потока
int ClearError(istream& isIn) {
streambuf* sbpThis;
char szTempBuf[20];
int nCount, nRet = isIn.rdstate();
if (nRet) {
isIn.clear();
sbpThis = isIn.rdbuf();
nCount = sbpThis->in_avail();
while (nCount) {
if (nCount > 20) {
sbpThis->sgetn(szTempBuf, 20);
nCount -= 20;
}
else {
sbpThis->sgetn(szTempBuf, nCount);
nCount = 0;
}
}
}
return nRet;
}
...
// Вот так вводить каждое число:
cout << "Vvedite chislo A: ";
do {
if(cin.rdstate()) {
ClearError(cin);
cout << "Error!!! Vvedite A (chislo): ";
}
cin >> A;
} while(cin.rdstate());
...
|
Jerry |
![]()
Сообщение
#8
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 46 Пол: Женский Репутация: ![]() ![]() ![]() |
выводит ошибку
.clear .rdbuf .rdstate' must have class/struct/union type -------------------- Zettai Unmei Mokushiroku
|
volvo |
![]()
Сообщение
#9
|
Гость ![]() |
Да ты что? У меня этот код и на Turbo C++ и на GCC и на Intel C++ Compiler нормально компилируется... Что у тебя установлено?
Хотя, понятно... #include "stdafx.h" VC ? Какой именно ? P.S. ![]() ![]() How To Clear an istream Object During Extraction |
Jerry |
![]()
Сообщение
#10
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 46 Пол: Женский Репутация: ![]() ![]() ![]() |
у меня MV C++ 6.0
-------------------- Zettai Unmei Mokushiroku
|
volvo |
![]()
Сообщение
#11
|
Гость ![]() |
Значит, выкини его на помойку, ибо в нем не идут программы из ЕГО ЖЕ справочной системы. (Я уж не говорю про его соответствие Стандарту С++)
|
Jerry |
![]()
Сообщение
#12
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 46 Пол: Женский Репутация: ![]() ![]() ![]() |
не могу... у нас в универе он установлен...((
-------------------- Zettai Unmei Mokushiroku
|
![]() ![]() |
![]() |
Текстовая версия | 30.07.2025 22:50 |