IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> проверка на ввод числа, С++
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 46
Пол: Женский

Репутация: -  0  +


программа переводит температуру цельчия в кельвины...
не выходит написать условие на проверку ввода числа типа - "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
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Не понял, почему бы вот так не сделать:
  if( sscanf(gets(in), INPUT_FORMAT, &number) != 1) {
	printf("Expecting a number!\n");
  }

?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






потому что если вводить чтото типа "45пр5", оно не выводит ошибку...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Тогда меняй формат ввода:
#define INPUT_FORMAT "%lf%c"
...

  if( sscanf(gets(in), INPUT_FORMAT, &number, &dummy) != 1) {
	printf("Expecting a number!\n");
  }
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 46
Пол: Женский

Репутация: -  0  +


все , спасибо)


--------------------
Zettai Unmei Mokushiroku
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Новичок
*

Группа: Пользователи
Сообщений: 46
Пол: Женский

Репутация: -  0  +


еще одно... как сделать проверку на ввод числа при вычислении формулы. что-то у меня не выходит...>.<
/*
  Данная программа выводит таблицу значений, вычисляемых по формуле
  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
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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());

...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Новичок
*

Группа: Пользователи
Сообщений: 46
Пол: Женский

Репутация: -  0  +


выводит ошибку
.clear
.rdbuf
.rdstate' must have class/struct/union type


--------------------
Zettai Unmei Mokushiroku
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






Да ты что? У меня этот код и на Turbo C++ и на GCC и на Intel C++ Compiler нормально компилируется... Что у тебя установлено?

Хотя, понятно...
#include "stdafx.h"

VC ? Какой именно ?

P.S.
blink.gif blink.gif Я тебе даже больше скажу: этот метод описан в MSDN, следовательно обязан работать в MS VC:
How To Clear an istream Object During Extraction
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Новичок
*

Группа: Пользователи
Сообщений: 46
Пол: Женский

Репутация: -  0  +


у меня MV C++ 6.0


--------------------
Zettai Unmei Mokushiroku
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






Значит, выкини его на помойку, ибо в нем не идут программы из ЕГО ЖЕ справочной системы. (Я уж не говорю про его соответствие Стандарту С++)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Новичок
*

Группа: Пользователи
Сообщений: 46
Пол: Женский

Репутация: -  0  +


не могу... у нас в универе он установлен...((


--------------------
Zettai Unmei Mokushiroku
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 9.01.2025 5:55
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name