Подтвердить что ты не робот

Как проверить, нет ли строки 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);
}
4b9b3361

Ответ 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;
}