Как проверить, пуста ли строка C
Я пишу очень маленькую программу на C, которая должна проверить, если определенная строка пустая. Ради этого вопроса я упростил свой код:
#include <stdio.h>
#include <string>
int main() {
char url[63] = {''};
do {
printf("Enter a URL: ");
scanf("%s", url);
printf("%s", url);
} while (/*what should I put in here?*/);
return(0);
}
Я хочу, чтобы программа прекратила цикл, если пользователь просто нажимает enter, ничего не вводя.
10 ответов
поскольку строки в стиле C всегда заканчиваются нулевым символом (), вы можете проверить, пуста ли строка, написав
do {
...
} while (url[0] != '');
кроме того, вы можете использовать strcmp
функция, которая является излишней, но может быть легче читать:
do {
...
} while (strcmp(url, ""));
отметим, что strcmp
возвращает ненулевое значение, если строки различны, и 0, если они одинаковы, поэтому этот цикл продолжает цикл, пока строка не пуста.
надеюсь, что это помогает!
Если первый символ бывает ''
, то у вас есть пустая строка.
это то, что вы должны сделать:
do {
/*
* Resetting first character before getting input.
*/
url[0] = '';
// code
} while (url[0] != '');
Обычно говоря, вам будет трудно получить пустую строку здесь, учитывая %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
, снова подробно в man-странице:
значение EOF возвращается, если конец ввода достигается до первого успешного преобразования или происходит сбой сопоставления. EOF также возвращается, если чтение возникает ошибка, в этом случае индикатор ошибки для потока (см. ferror(3)), а errno устанавливается укажет на ошибку.
strlen(url)
возвращает длину строки. Он подсчитывает все символы, пока не будет найден нулевой байт. В вашем случае проверьте его на 0.
или просто проверьте его вручную с помощью:
*url == ''
Вы можете проверить возвращаемое значение из scanf
. Этот код будет просто сидеть там, пока не получит строку.
int a;
do {
// other code
a = scanf("%s", url);
} while (a <= 0);
вы можете попробовать так: -
if (string[0] == '') {
}
в вашем случае это может быть как:-
do {
...
} while (url[0] != '')
;
заменить на scanf()
С fgets()
...
do {
if (!fgets(url, sizeof url, stdin)) /* error */;
/* ... */
} while (*url != '\n');
самый короткий способ сделать это было бы:
do {
// Something
} while (*url);
по сути, *url
вернет символ в первой позиции массива; так как строки C имеют нулевое завершение, если строка пуста, ее первой позицией будет символ ''
, в ASCII, стоимость которых составляет 0
; так как логические операторы C обрабатывают каждое нулевое значение как false
, этот цикл будет продолжаться, пока первая позиция строки не равна нулю, то есть пока строка не является пустой.
рекомендуемые показания, если вы хотите понять это лучше:
- строки C:https://www.tutorialspoint.com/cprogramming/c_strings.htm
- C массивы:https://www.tutorialspoint.com/cprogramming/c_arrays.htm
- отношение между массивами и указателями:https://www.programiz.com/c-programming/c-pointers-arrays
- логические операторы: https://www.tutorialspoint.com/cprogramming/c_logical_operators.htm
С помощью 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] = {''};
do {
printf("Enter a URL: ");
scanf("%s", url);
printf("url='%s'\n", url);
} while (is_whitespace(url));
return 0;
}