Вывести «нет решения», если нет ввода - PullRequest
0 голосов
/ 16 апреля 2020

Я попытался изменить этот код для печати

no solution

, если пользователь не вводит никаких данных. То есть, если я запускаю программу и просто нажимаю ввод, она должна вывести no solution. Я добавил код, предназначенный для этого, чтобы проверить, равна ли длина строки 0, затем вывести, но она не работает

#include <stdio.h>
#include <string.h>
int main()
{
    char str1[100];
    char newString[10][10];
    int i, j, ctr;

    fgets(str1, sizeof str1, stdin);
    j = 0; ctr = 0;

    if (strlen(str1) == 0) {
        printf_s("no solution");
    }
    else 
    for (i = 0; i <= (strlen(str1)); i++)
    {

        // if space or NULL found, assign NULL into newString[ctr]
        if (str1[i] == ' ' || str1[i] == '\0')
        {
            newString[ctr][j] = '\0';
            ctr++;  //for next word
            j = 0;    //for next word, init index to 0
        }
        else if (str1[i] == '.' || str1[i] == ',')
        {
            newString[ctr][j] = '\0';
            ctr--;  //for next word
            j = - 1;   
        }

        else
        {
            newString[ctr][j] = str1[i];
            j++;
        }

    }
    printf("\n\n");
    for (i = 0; i < ctr; i++)
        printf(" %s\n", newString[i]);
    return 0;
}

1 Ответ

1 голос
/ 16 апреля 2020

fgets() добавит новую строку в вашу строку (см. Эту ссылку для получения дополнительной информации), что означает, что когда вы просто нажимаете ввод ваша длина строки (так как ваша строка включает \n) равно 1, вы должны сказать:

    if (strlen(str1) == 1) {
        printf_s("no solution");
         // it's better to add a return 0; here if you don't want to continue the program
    }

или использовать это вместо:

    if (!strcmp(str1,"\n")) {
        printf_s("no solution");
    }
...