Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.01.2013, 21:27   #1
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию Организация запрета ввода числа вещественного типа (разделенного точкой)...

Привет! Не коррекно работает выделенный блок проверки...

Код:
#include <iostream>//подключение заголовочного файла для операторов ввода/вывода
using namespace std;//использование стандартного пространства имен std для операторов ввода/вывода
char filename[100];//массив для хранения адреса к файлу
FILE *file;//файловая переменная
int stream[100];//входной поток
char digit[100];
int tempstream[100];//поток
int N;//целочисленная переменная для хранения количества вводимых элементов
int i;//итератор для прохода по массиву значений
int iter;
int retvalue;
int n;
int returndigit;//число после выполнения atoi(строка)
int flag;//флаг
int k;//итератор по строке
void main() {
	cout << "Enter the path to the file: ";
	gets(filename);
	file=fopen(filename, "w+b");
	if (file!=NULL) {
		cout << "Enter the amount of the digits: ";
		cin >> N;
		if (N<=0 || N>100) {
			cout << "Wrong value. Re-enter: ";
			cin >> N;
		}



		rewind(file);
		cout << "Enter integer digits: " << "\n";
		//не работает этот блок:
		flag=1;
		i=0;
		while (i<N) {
			gets(digit);
			k=0;
			do {
				if (digit[k]<'0' || digit[k]>'9') 
					flag=0;
				k++;
			} while(k<=strlen(digit) || flag!=0);
			if (digit[k]!='.') {
				i++;
		        returndigit=atoi(digit);
				cout << "returndigit: " << returndigit;
			}
			else cout << "WRONG!! Re-enter: ";
		}
	    rewind(file);
		fread(tempstream, sizeof(int), N, file);
		for (i=0; i<N; i++) {
			cout << "In file: " << tempstream[i] << "\n";
		}
		//конец блока



		cout << "Data writing in the file addres: ";
		puts(filename);
		retvalue=fwrite(stream, sizeof(int), N, file);//запись входных данных в файл
		cout << "Amount of the data written: " << retvalue << "\n";
		cout << "Reading data from the file address: ";
		puts(filename);
	    cout << "Data in the file: " << "\n";
	for (i=0, iter=1; i<N; i++, iter++) {//блок вывода элементов, записанных в выходной поток
		cout << "[" << iter << "]: ";
		cout << stream[i] << "\n";
	}
		cout << "Data processing..." << "\n";
	for (i=0; i<N; i++) {
		fseek(file, sizeof(int)*i, 0);
		fread(&stream[i], sizeof(int), 1, file);
		if (stream[i]<0) {
			stream[i]=0;
		}
		}
		cout << "Result of data processing written to the address: ";
		puts(filename);
		rewind(file);
		fwrite(stream, sizeof(int), N, file);
		rewind(file);
		fread(stream, sizeof(int), N, file);
		for (i=0; i<N; i++) {
			cout << stream[i] << " ";
		}
	}
	else cout << "Error opening the file..." << "\n";
	system("pause");
	}
Igor95 вне форума Ответить с цитированием
Старый 09.01.2013, 21:43   #2
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

да, и еще одно, почему в коде
Код:
while (i<N) {
			gets(digit);
			k=0;
...
gets(digit) - вводится строка без участия пользователя?
Igor95 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа на файлы вещественного типа PorniK Паскаль, Turbo Pascal, PascalABC.NET 4 26.06.2012 10:06
Программа для работы с циклическим списком. Информация вещественного типа. antojke Помощь студентам 0 09.12.2011 00:00
вывод вещественного числа olegnaum Общие вопросы C/C++ 8 21.11.2009 21:03
функция Perim(Ax,Ay,Bx,By,Cx,Cy) вещественного типа, находящая периметр треугольника ABC lucky Паскаль, Turbo Pascal, PascalABC.NET 8 23.12.2008 20:19
Является ли заданная строка правильной записью вещественного числа с возможным знаком и десятичной точкой Banny Паскаль, Turbo Pascal, PascalABC.NET 7 18.12.2008 22:28