Как проверить, нет ли строки C
Я пишу очень маленькую программу на C, которая должна проверять, является ли определенная строка пустой. Ради этого вопроса я упростил свой код:
#include <stdio.h>
#include <string>
int main() {
char url[63] = {'\0'};
do {
printf("Enter a URL: ");
scanf("%s", url);
printf("%s", url);
} while (/*what should I put in here?*/);
return(0);
}
Я хочу, чтобы программа останавливала цикл, если пользователь просто нажимает кнопку ввода, не вводя ничего.
Спасибо.
EDIT:
У меня здесь небольшая проблема. Когда я нажимаю кнопку ввода, не вводя ничего в терминал, курсор просто переходит к следующей строке. Есть ли что-нибудь, просто чтобы он ничего не представлял вместо того, чтобы переместиться на следующую строку?
EDIT:
Я обнаружил, что добавление [^\n] в scanf позволяет мне ничего не вводить и все равно отправлять. Однако, когда я что-то вводил, он запускается еще раз, а затем завершает цикл. Здесь обновленный код:
int main() {
char url[63] = {'\0'};
do {
printf("Enter a URL: ");
scanf("%[^\n]s", url);
} while (url[0] != '\0');
return(0);
}
Ответы
Ответ 1
Так как строки C-стиля всегда заканчиваются нулевым символом (\0
), вы можете проверить, пуста ли строка, написав
do {
...
} while (url[0] != '\0');
В качестве альтернативы вы можете использовать функцию strcmp
, которая является излишней, но может быть легче читать:
do {
...
} while (strcmp(url, ""));
Обратите внимание, что strcmp
возвращает ненулевое значение, если строки разные, и 0, если они одинаковы, поэтому этот цикл продолжает цикл до тех пор, пока строка не будет пуста.
Надеюсь, это поможет!
Ответ 2
Если вы хотите проверить, является ли строка пустой:
if (str[0] == '\0')
{
// your code here
}
Ответ 3
Если первый символ имеет значение '\0'
, то у вас есть пустая строка.
Это то, что вы должны сделать:
do {
/*
* Resetting first character before getting input.
*/
url[0] = '\0';
// code
} while (url[0] != '\0');
Ответ 4
Как правило, вам будет сложно получить пустую строку здесь, учитывая, что %s
игнорирует пробел (пробелы, табуляции, новые строки)... но независимо, scanf()
фактически возвращает количество успешных совпадений...
На странице man:
количество элементов ввода, успешно совпадающих и назначенных, которые могут быть меньше, чем предусмотрено, или даже нуля в случае раннего несоответствия.
поэтому, если им удастся пройти пустую строку (например, ctrl+z
), вы можете просто проверить результат возврата.
int count = 0;
do {
...
count = scanf("%62s", url); // You should check return values and limit the
// input length
...
} while (count <= 0)
Обратите внимание, что вы должны проверить меньше, чем потому, что в примере, который я дал, вы вернетесь -1
, еще раз подробно на странице руководства:
Значение EOF возвращается, если конец ввода достигнут до того, как произойдет первое успешное преобразование или соответствующий сбой. EOF также возвращается, если возникает ошибка чтения, и в этом случае устанавливается индикатор ошибки для потока (см. Ferror (3)), а значение errno - ошибка.
Ответ 5
Вы можете попробовать следующее: -
if (string[0] == '\0') {
}
В вашем случае это может быть как: -
do {
...
} while (url[0] != '\0')
;
Ответ 6
Сначала замените scanf()
на fgets()
...
do {
if (!fgets(url, sizeof url, stdin)) /* error */;
/* ... */
} while (*url != '\n');
Ответ 7
strlen(url)
Возвращает длину строки. Он подсчитывает все символы до тех пор, пока не будет найден нуль-байт. В вашем случае проверьте его на 0.
Или просто проверьте его вручную:
*url == '\0'
Ответ 8
Вы можете проверить возвращаемое значение с scanf
. Этот код будет просто сидеть там, пока не получит строку.
int a;
do {
// other code
a = scanf("%s", url);
} while (a <= 0);
Ответ 9
С помощью strtok() это можно сделать только в одной строке: "if (strtok (s," \t ") == NULL)".
Например:
#include <stdio.h>
#include <string.h>
int is_whitespace(char *s) {
if (strtok(s," \t")==NULL) {
return 1;
} else {
return 0;
}
}
void demo(void) {
char s1[128];
char s2[128];
strcpy(s1," abc \t ");
strcpy(s2," \t ");
printf("s1 = \"%s\"\n", s1);
printf("s2 = \"%s\"\n", s2);
printf("is_whitespace(s1)=%d\n",is_whitespace(s1));
printf("is_whitespace(s2)=%d\n",is_whitespace(s2));
}
int main() {
char url[63] = {'\0'};
do {
printf("Enter a URL: ");
scanf("%s", url);
printf("url='%s'\n", url);
} while (is_whitespace(url));
return 0;
}