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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.11.2008, 22:47   #1
FW-TOT
Пользователь
 
Регистрация: 01.08.2008
Сообщений: 19
По умолчанию TurboC - баг при вводе строки с клавиатуры

Код:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
char a[50][50];
int sort_function( const void *a, const void *b)
{
   return( strcmp((char *)a,(char *)b) );
}
void main()
{
	char s[100]=/*{0}*/"abc    gg   ff";
	char *p=s;
	int i=0,w=0;
	clrscr();
/*	printf("Enter your phrase: ");
	scanf("%s",s);
*/
	while(*p){
		strcpy(a[i],strtok (p," "));
		p=p+strlen(a[i])+1;
		while(*p==' ')
			p++;
		i++;
		w++;
	}
	qsort(a, w, 50, sort_function);
	for (i = 0; i < w; i++)
		printf("%s ", a[i]);

getch();
}
Тестирование кода накрылось, когда я попытался вводить строку с клавиатуры. С тестовой строкой (как в приведённом коде) программа работает. Если убрать комментарии со ввода строки, то в s вводится значение до первого пробела включительно. Сортировка, естественно, не получается...
Не могу понять, в чём дело. Как решить проблему?
От неудач не ревут. С ними разбираются.

Последний раз редактировалось FW-TOT; 18.11.2008 в 00:05.
FW-TOT вне форума Ответить с цитированием
Старый 18.11.2008, 00:04   #2
FW-TOT
Пользователь
 
Регистрация: 01.08.2008
Сообщений: 19
По умолчанию

Хммм... проблема решилась, но не знаю, насколько это дико выглядит. Вместо scanf я использовал
Код:
	
	char ch;
        while ((ch=getchar())!='\n')
	{
		s[i]=ch;
		i++;
	}
	i=0;
Могли ли быть другие варианты?
От неудач не ревут. С ними разбираются.
FW-TOT вне форума Ответить с цитированием
Старый 21.11.2008, 00:27   #3
pupor
 
Регистрация: 21.11.2008
Сообщений: 6
По умолчанию

все дело в том что функция scanf() забирает строку до 1-го пробела.
чтобы считать строку до знака "\n" я пользуюсь функцией gets(), из conio.h
pupor вне форума Ответить с цитированием
Старый 21.11.2008, 00:44   #4
StarWorm
Форумчанин
 
Регистрация: 17.11.2008
Сообщений: 233
Подмигивание

Можно еще использовать cin.getline() из <iostream>
StarWorm вне форума Ответить с цитированием
Старый 21.11.2008, 01:39   #5
filosof_x86
...
Форумчанин
 
Аватар для filosof_x86
 
Регистрация: 01.06.2008
Сообщений: 134
По умолчанию

Цитата:
Сообщение от pupor Посмотреть сообщение
чтобы считать строку до знака "\n" я пользуюсь функцией gets(), из conio.h
Небольшая поправка, gets() объявлен в stdio.h

Цитата:
Сообщение от StarWorm Посмотреть сообщение
Можно еще использовать cin.getline() из <iostream>
Выше код на Си, а не на С++.
filosof_x86 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
При вводе значения в ячейку нужно изменить ее размер skobarka Microsoft Office Excel 2 26.09.2008 16:35
Странный баг при работе с разделяемой памятью в C mephisto123 Qt и кроссплатформенное программирование С/С++ 2 01.08.2008 18:10
отключение проверки при вводе engeneer Паскаль, Turbo Pascal, PascalABC.NET 21 23.07.2008 19:45
преобразование массивов при вводе данных greenkat Microsoft Office Excel 4 28.02.2008 19:21
Проблемка при вводе чисел at10 Microsoft Office Excel 4 02.12.2007 22:22