Почему мой код продолжает возвращать 1 с сообщением об ошибке, даже если я ввожу di git? - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь выполнить упражнение Caesar на pset 2. Мой код компилируется нормально, но мне кажется, что он дает мне вывод Использование: ./caesar key, даже если я ввел int. Любая помощь очень ценится, когда я ошибаюсь:)

Программа должна работать, при этом пользователь вводит ./Caesar, за которым следует пробел и целое число. Он должен печатать успех и целое число. Если пользователь должен был ввести что-то еще, кроме этого ie. 2x или любые другие символы и т. Д. c, на нем должно быть напечатано: ./caesar key.

// Libraries
#include <cs50.h>
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>

int main(int argc, string argv[])

{

    if (argc == 2 && (atoi(argv[1]) > 0))
     for(int i = 0, len = strlen(argv[1]); i < len; i++)
        {
           char n = argv[1][i];
           int digit = isdigit(n);


           if (n != digit)
            {
                printf("Usage: ./caesar key\n");
                return 1;
            }

          else
            {
                printf("Success\n %i", digit);
                return 0;
            }  


        }

    else 
    {
       printf("Usage: ./caesar key\n");
       return 1; 
    }


}

Ответы [ 2 ]

3 голосов
/ 06 апреля 2020
int digit = isdigit(n);
if (n != digit)

должно быть

int digit = isdigit(n);  // 0 (false) if n isn't a digit; non-zero (true) if n is a digit.
if (!digit)

или просто

if (!isdigit(n))
2 голосов
/ 06 апреля 2020

Ваш код возвращает 1 каждый раз из-за оператора

if(n != digit)

isdigit() Функция в C возвращает ненулевое значение (1), если символ передан в это di git, то есть от 0 до 9. Когда вы сравниваете n и digit, тогда сравниваются значения ascii для n и di git. Таким образом, если условие всегда приведет к Истине, так как n и digit не будут равны.

Я думаю, что вы хотите сравнить, это di git это ноль, т.е.

if(digit == 0)

...