Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

C не сравниваются строки

6.8K
10 ноября 2006 года
byff
38 / / 01.07.2006
scanf("%s",buffer);
if (buffer == "q") break;
ввожу q и он просто пропускает. Почему?
3
10 ноября 2006 года
Green
4.8K / / 20.01.2000
Потому, что C-string (в отличие от std::string) сравниваются с помощью соотв. функций сравнения, например strcmp.
6.8K
10 ноября 2006 года
byff
38 / / 01.07.2006
В книжке Брэдли Л джонса по сям на странице 367 почему - то так и сравнивают.
while (gets(buffer) != '\0');
6.8K
10 ноября 2006 года
byff
38 / / 01.07.2006
а как сравнить то их?
3
10 ноября 2006 года
Green
4.8K / / 20.01.2000
[QUOTE=byff]В книжке Брэдли Л джонса по сям на странице 367 почему - то так и сравнивают.
while (gets(buffer) != '\0');[/QUOTE]
Это сравниваются не строки, а символы.

[QUOTE=byff]
а как сравнить то их?
[/QUOTE]
говорил же: strcmp, stricmp и т.п.
22K
10 ноября 2006 года
ochelot2
3 / / 06.11.2006
#include <string.h>
...
char buffer[255];
scanf("%s",buffer);
if (strcmp(buffer, "str")) ... break;
...
6.8K
10 ноября 2006 года
byff
38 / / 01.07.2006
C символами сравнивается а как сравнить с '\0'? Чтобы при нажатии enter без ввода выполся break ?
5.4K
10 ноября 2006 года
Svyatozar
221 / / 11.09.2006
[QUOTE=byff]scanf("%s",buffer);
if (buffer == "q") break;
ввожу q и он просто пропускает. Почему?[/QUOTE]
У тебя buffer - это указатель. Ты сравниваешь физические адреса в памяти!

Если нужно сравнить всего одну букву попробуй заменить на:
if(buffer[0] == 'q') break;

Чтобы определить пустую строку:
if(buffer[0] == '\0') {
// что-то еще
}
6.8K
10 ноября 2006 года
byff
38 / / 01.07.2006
[QUOTE=Svyatozar]
Чтобы определить пустую строку:
if(buffer[0] == '\0') {
// что-то еще
}[/QUOTE]
Так не сравнивает
5.4K
10 ноября 2006 года
Svyatozar
221 / / 11.09.2006
[QUOTE=byff]Так не сравнивает[/QUOTE]
Всмысле? Что пишет? И вообще, как объявлена переменная buffer?
1.9K
11 ноября 2006 года
[*]Frosty
278 / / 17.06.2006
2byff Читай сообщения внимательнее!

Цитата:
Потому, что C-string (в отличие от std::string) сравниваются с помощью соотв. функций сравнения, например strcmp.




Если нужно сравнить введеную сторку с "q"(сигнал о выходе, как понял) использую след. код:

 
Код:
#include <stdio.h>
...
char buffer[256];
scanf("%s", buffer);

if(!strcmp(buffer, "q"))
{
  printf("buffer == q");
}
6.8K
11 ноября 2006 года
byff
38 / / 01.07.2006
C q то он сравнивает а с \0 не хочет, не возвращает положительного значения при нажатии enter
1.9K
11 ноября 2006 года
[*]Frosty
278 / / 17.06.2006
Да ты частично прав)
Вот так)
 
Код:
[COLOR="SeaGreen"]#include <stdio.h>[/COLOR]
//...
char buffer[256];
fgets(buffer, 256, stdin);
if(buffer[0] == '\n')
{
  printf("buffer == \"\"");
}


Оказываетья scanf("%s") не чувствителен к пробельным символам в начале строки, он если можно сказать ждет ввода реальной строки пропуская пробельные сисмволы.
23K
15 ноября 2006 года
Dark Tranquillity
2 / / 15.11.2006
Ребят, вы что?
Строка в С/С++ (если объявлена как массив символов char) - это просто последовательность, завершающаяся нулевым символом '\0'.
Сравнить с '\0' строку фактически нельзя, но логически это
if (strlen(buffer) == 0)
{
...
}
То есть просто пустая строка.
1.9K
15 ноября 2006 года
[*]Frosty
278 / / 17.06.2006
2Dark Tranquillity
Если смотреть на С, то в данном случае лучше воспользоваться fgets(). А она если мы ничего не введем окромя <Enter>, запишет в конец строки '/n' и проверка на нулевую длину не подойдет(она будет == 1 и нужно будет воспользоваться проверкой
 
Код:
buffer[0] == '\n;'
).
23K
16 ноября 2006 года
Dark Tranquillity
2 / / 15.11.2006
2
  • Frosty
    fgets это да.
    А gets нет. :)
    Вобщем, парень пусть определится толком, что он хочет сделать. :)
  • 1.9K
    16 ноября 2006 года
    [*]Frosty
    278 / / 17.06.2006
    Dark Tranquillity2
    gets, может вызвать переполнение приемника(ты же не знаешь скока он там те приготовил ;) ). fgets, позволяет обойти этот недостаток
     
    Код:
    char buffer[256];
    fgets(buffer, [COLOR="Red"]256[/COLOR], stdin);
    Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
    Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог