#include <stdio.h>
...
char buffer[256];
scanf("%s", buffer);
if(!strcmp(buffer, "q"))
{
printf("buffer == q");
}
C не сравниваются строки
if (buffer == "q") break;
ввожу q и он просто пропускает. Почему?
Потому, что C-string (в отличие от std::string) сравниваются с помощью соотв. функций сравнения, например strcmp.
while (gets(buffer) != '\0');
а как сравнить то их?
while (gets(buffer) != '\0');[/QUOTE]
Это сравниваются не строки, а символы.
[QUOTE=byff]
а как сравнить то их?
[/QUOTE]
говорил же: strcmp, stricmp и т.п.
...
char buffer[255];
scanf("%s",buffer);
if (strcmp(buffer, "str")) ... break;
...
C символами сравнивается а как сравнить с '\0'? Чтобы при нажатии enter без ввода выполся break ?
if (buffer == "q") break;
ввожу q и он просто пропускает. Почему?[/QUOTE]
У тебя buffer - это указатель. Ты сравниваешь физические адреса в памяти!
Если нужно сравнить всего одну букву попробуй заменить на:
if(buffer[0] == 'q') break;
Чтобы определить пустую строку:
if(buffer[0] == '\0') {
// что-то еще
}
Чтобы определить пустую строку:
if(buffer[0] == '\0') {
// что-то еще
}[/QUOTE]
Так не сравнивает
Всмысле? Что пишет? И вообще, как объявлена переменная buffer?
Цитата:
Потому, что C-string (в отличие от std::string) сравниваются с помощью соотв. функций сравнения, например strcmp.
Если нужно сравнить введеную сторку с "q"(сигнал о выходе, как понял) использую след. код:
Код:
C q то он сравнивает а с \0 не хочет, не возвращает положительного значения при нажатии enter
Вот так)
Код:
[COLOR="SeaGreen"]#include <stdio.h>[/COLOR]
//...
char buffer[256];
fgets(buffer, 256, stdin);
if(buffer[0] == '\n')
{
printf("buffer == \"\"");
}
//...
char buffer[256];
fgets(buffer, 256, stdin);
if(buffer[0] == '\n')
{
printf("buffer == \"\"");
}
Оказываетья scanf("%s") не чувствителен к пробельным символам в начале строки, он если можно сказать ждет ввода реальной строки пропуская пробельные сисмволы.
Строка в С/С++ (если объявлена как массив символов char) - это просто последовательность, завершающаяся нулевым символом '\0'.
Сравнить с '\0' строку фактически нельзя, но логически это
if (strlen(buffer) == 0)
{
...
}
То есть просто пустая строка.
Если смотреть на С, то в данном случае лучше воспользоваться fgets(). А она если мы ничего не введем окромя <Enter>, запишет в конец строки '/n' и проверка на нулевую длину не подойдет(она будет == 1 и нужно будет воспользоваться проверкой
Код:
buffer[0] == '\n;'
fgets это да.
А gets нет. :)
Вобщем, парень пусть определится толком, что он хочет сделать. :)
gets, может вызвать переполнение приемника(ты же не знаешь скока он там те приготовил ;) ). fgets, позволяет обойти этот недостаток
Код:
char buffer[256];
fgets(buffer, [COLOR="Red"]256[/COLOR], stdin);
fgets(buffer, [COLOR="Red"]256[/COLOR], stdin);