строки и функция isdi git - PullRequest
0 голосов
/ 08 мая 2020
#include<stdio.h>
#include<string.h>
#include<ctype.h>
int digit(s1);
int main()
{char s1[10];
printf("\n Type anything you want:\n");
gets(s1);
printf("The number of digits is:%d",digit(s1));
return 0;
}
int digit(char* s1)
{
    int i=0;
  while(*s1)
{
i+= !!isdigit(*s1++);
}
return i;
}

Это мой код, мне нужно выяснить, это элемент, которому я даю ди git или нет. Я меняю его на void di git, и теперь он работает отлично.

Ответы [ 3 ]

0 голосов
/ 08 мая 2020

В предоставленном вами коде есть несколько серьезных проблем. Если в лекции предлагается использовать gets(), бросьте его в tra sh, вместо этого используйте fgets(). Причину, по которой вы можете найти по этой ссылке:

Почему функция gets настолько опасна, что ее не следует использовать?

Кроме того, лекция кажется чтобы вы даже не научились правильно передавать параметры или правильно выводить значения переменных.

Я рекомендую вам прочитать хорошую C стартовую книгу, например, this . Список рекомендованных книг также можно найти здесь:

The Definitive C Книжное руководство и список

Чтобы сосредоточить внимание только на одной проблеме, вывод:

printf("There are %d digits in your string.");

Это использование printf() неверно. Откуда взять значение, указанное в %d? В спецификаторе формата %d отсутствует соответствующий аргумент, который указывает на целочисленное значение или переменную int, например:

int a = 10;
printf("a = %d",a);

%d требуется соответствующий аргумент типа int для фактической печати ценность. В противном случае поведение не определено .

Это должно во всех случаях давать диагностику c. Никогда не игнорируйте предупреждения компилятора.


Почему я всегда должен включать предупреждения компилятора?

0 голосов
/ 08 мая 2020
#include<stdio.h>
#include<string.h>
#include<ctype.h>

int count_digits(const char *s1);

int main()
{
    char s1[20];
    printf("\n Type anything you want:\n");
    fgets(s1, sizeof(s1), stdin);
    printf("The number of digits is:%d", count_digits(s1));
    return 0;
}

int count_digits(const char* s1)
{
    int count = 0;
    while(*s1) 
    {
        count += !!isdigit(*s1++);
    }
    return count;
}
0 голосов
/ 08 мая 2020

isdigit - это стандартная функция C, объявленная в <ctype.h>. Ваша функция конфликтует с этим. Выберите другое имя для вашей функции.

Это позволит избежать сообщения компилятора о конфликтующих типах, но в вашей программе есть другие ошибки, которые вам необходимо исправить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...