Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/74: Рейтинг темы: голосов - 74, средняя оценка - 4.69
SZ
2 / 2 / 0
Регистрация: 16.11.2008
Сообщений: 44

Проблемы с пробелом

12.03.2009, 00:20. Показов 14676. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дан код на Си:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<stdio.h>
#include<string.h>
void main()
{
    char s[1000];
    printf("Vvedite stroky:\n");
    scanf("%s",s);
    for(int i=0;i<strlen(s);i++)
    {
        if(s[i]=='  ')
        {
            printf("Adres bykvi - %d, sama bukva - %c\n",&s[i],s[i]);
        }
    }
}
Проблема в том, что программа не хочет работать с пробелами, со всеми остальными символами работает нормально, а пробелы не принимает.
Я вручную ввожу строку (qwert qwert), в коде поочередно сам меняю вместо пробела другие символы. Напр, для буквы 'r' printf() выводит: "Адрес - 1244027, сама буква - r", для 't' - "Адрес - 1244028, сама буква - t". Доходит очередь до пробела, и меня просто отсылает программа на следующую строку. Это что специфический символ какой?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.03.2009, 00:20
Ответы с готовыми решениями:

Последовательности следующих друг за другом пробелов заменить одним пробелом (т.е. удалить все пробелы, следующие непосредственно за пробелом)
Последовательности следующих друг за другом пробелов заменить одним пробелом (т.е. удалить все пробелы, следующие непосредственно за...

Проблемы с инетом, не отправляется почта, проблемы со связью с другой организацией
Здравствуйте. Есть проблемка. Такая ситуация - Организация. Компьютеры подключены по локалке. Находятся в домене. Интернет есть, но! не...

Regex с пробелом
Доброго времени суток. Нужно регулярным выражением вытянуть некую подстроку, точнее слово, что находится между пробелами. В строке всего 2...

12
 Аватар для Gravity
577 / 571 / 65
Регистрация: 29.01.2009
Сообщений: 1,274
12.03.2009, 00:35
scanf не записывает пробелов, т.е. при встрече пробела он считает, что строка закончилась и пишет символ конца строки. Как вариант, можно использовать ввод getchar'ом.
1
SZ
2 / 2 / 0
Регистрация: 16.11.2008
Сообщений: 44
12.03.2009, 00:39  [ТС]
Цитата Сообщение от Nestor Посмотреть сообщение
scanf не записывает пробелов, т.е. при встрече пробела он считает, что строка закончилась и пишет символ конца строки. Как вариант, можно использовать ввод getchar'ом.
Спасибо большое. Gets пошло.
0
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
12.03.2009, 00:40
есть хорошая функци gets() библитотеки stdio.h

C++
1
2
char *str;
gets(str);
0
SZ
2 / 2 / 0
Регистрация: 16.11.2008
Сообщений: 44
12.03.2009, 00:49  [ТС]
Цитата Сообщение от Don Corleone Посмотреть сообщение
есть хорошая функци gets() библитотеки stdio.h

C++
1
2
char *str;
gets(str);
Оки. Я уже написал. Вот одно из ее преимуществ.
0
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
12.03.2009, 00:52
в с++ есть еще альтернатива у метода обьекта cout
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
12.03.2009, 01:03
Цитата Сообщение от Nestor Посмотреть сообщение
scanf не записывает пробелов, т.е. при встрече пробела он считает, что строка закончилась и пишет символ конца строки. Как вариант, можно использовать ввод getchar'ом.
Это ошибочное утверждение. scanf легко читает пробелы и другие символы.
Дело не в scanf, а в спецификаторе s. Если я, например, сделаю так:
C
1
scanf("%10c", s)
То в считанные десять символов попадут пробелы (нужно не забыть нулевой символ в конце).
0
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
12.03.2009, 01:09
Цитата Сообщение от Vourhey Посмотреть сообщение
Это ошибочное утверждение. scanf легко читает пробелы и другие символы.
Дело не в scanf, а в спецификаторе s. Если я, например, сделаю так:
C
1
scanf("%10c", s)
То в считанные десять символов попадут пробелы (нужно не забыть нулевой символ в конце).
да, и так можно... но согласись, так ты задаешь кол-во считываемых символов, а так ты считываешь строку целиком... поэтому gets() приемлемей..
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
12.03.2009, 01:16
Don Corleone, не соглашусь ни с одним из вас.
Первое: scanf нормально читает пробелы.
Второе: не нравится задание количества символов? Простите, а зачем тогда
char s[1000] задали тысячу? но согласись ты здесь ограничил длину строки ? И чем мое ограничение уступает твоему? gets - дыра в программе.
Давайте тогда писать по-нормальному и использовать fgets, на stdin раз вы за приемлемость. Вот это и есть правильное решение. gets не приемлемое решение.
0
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
12.03.2009, 01:28
Vourhey, у каждого свое мнение на этот счет... я вообще использую метод объекта cin .. в некоторых случаях использую scanf... все зависит от программы.. и необходимо использовать то, что наиболее преемлево в данном случае...
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
12.03.2009, 01:46
необходимо использовать то, что наиболее преемлево в данном случае...
С этим никто и не спорит.
А тут и без мнений все понятно. Ты говоришь, зачем там нужно количество символов. Вот я тебе и ответил, что за тем же, зачем и в char s[1000];.
Поэтому в данном случае приемлем и scanf и gets. Оба. Причем, scanf будет безопасней. А cin оставим лучше сумасшедшим плюсам, так как, у нас тут замечательные С.
0
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
12.03.2009, 01:56
Цитата Сообщение от Vourhey Посмотреть сообщение
А cin оставим лучше сумасшедшим плюсам, так как, у нас тут замечательные С.
я не понимаю, что люди имею тпротив с++ ?? по-моему замечательный гибкий язык!
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
12.03.2009, 02:41
можно заюзать
Code
1
2
    if (scanf("%100[^\n]%*с", s) == 1)
        Print("ok");
gets, конечно, не имеет защиты от более длинной, чем символьный массив, строки
fgets останавливается на \n и, даже если это нужно, записывает его в строку, а для scanf можно любой паттерн задать хоть остановка на пробеле (типа строкой считается всё от пробела до пробела)

для C++ есть ещё getline()
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
#include <iostream>
 
#define MAXLINE  1000   /* максимальная длина строки */
 
using namespace std;
 
/* запрашивает строку с помощью метода cin и выводит её */
int main()
{
    char line[MAXLINE];
    
    cin.getline(line, MAXLINE);
    cout << line << endl;
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.03.2009, 02:41
Помогаю со студенческими работами здесь

Программа с пробелом
Здравствуйте. Подскажите, пожалуйста, как написать условия (через одномерные массивы) : 1)если в строке находятся два рядом...

Конкатенация с пробелом
Добрый вечер, господа! Мучаю простенькие задачи на вложенные циклы. Необходимо из * построить фигуру параллелограмма следующего вида...

explode с пробелом
Ребята, есть данные вида ключ значение ключ значение Ничего сложно - каждая нечётная строка это ключ для следующей за ней...

Аргумент с пробелом
Имеется следующий код ProcessBuilder b = new ProcessBuilder(&quot;darkplaces.exe&quot;, &quot;-game mydayisover&quot;); но аргумент &quot;-game...

А и Б, разделенные пробелом
A=input() B=input(); print(A**B) Как бы все ясно. Только проблема в том, что &quot;Входной поток в первой строке содержит числа A и B,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru