#c #if-statement #cs50 #argv #atoi
#c #if-statement #cs50 #argv #atoi
Вопрос:
Я пытаюсь преобразовать свою строку argv в целое число. Для некоторых я не могу запустить свой последний оператор else. Буду признателен за любую помощь. Я только начинаю с C. Вот мой код.
#include <cs50.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int main(int argc, string argv[])
{
if (argc == 2)
{
for(int i = 0, n = strlen(argv[1]); i < n; i )
{
if (!isdigit(argv[1][i])) {
printf("Usage: ./caesar keyn");
}
}
}
else if (argc != 2)
{
printf("Usage: ./caesar keyn");
}
else if (argc == 2)
{
int x = atoi(argv[1]);
printf("%i", x);
return 0;
}
}
Ответ №1:
Написанная с помощью фигурных скобок и отступов, ваша структура кода выглядит следующим образом:
if ( argc == 2 )
{
stuff
}
else
{
if ( argc != 2 )
{
stuff
}
else if ( argc == 2 )
{
stuff
}
}
Итак, как только первый тест завершается неудачей, выполнение переходит к после окончания блока, контролируемого соответствующим else
.
Написанный вами код имеет ту же логику, только без необязательных фигурных скобок и разных пробелов.
Ответ №2:
Я не могу запустить свой последний оператор else.
… почему мой последний оператор else не будет выполняться?
При лучшем форматировании может быть легче увидеть, что код тестируется (argc == 2)
дважды в одном и том же if, else if, else if
дереве.
int main(int argc, string argv[]) {
if (argc == 2) {
for (int i = 0, n = strlen(argv[1]); i < n; i ) {
if (!isdigit(argv[1][i])) {
printf("Usage: ./caesar keyn");
}
}
} else if (argc != 2) {
printf("Usage: ./caesar keyn");
} else if (argc == 2) { // cannot be true given prior `if (argc == 2)`
int x = atoi(argv[1]);
printf("%i", x);
return 0;
}
}