Не выходит в условие else if. При кзапуске вообще без аргумента пишет sigmentation fault. В чем ошибка?
#include <stdio.h>
#include <cs50.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
int check_key(string argv);
int main(int argc, string argv[])
{
int key = check_key(argv[1]);
if(argc != 2)
{
printf("Usage: ./ceaser key\n");
}
else if(isdigit(key))
{
printf("Succes\n");
}
else
{
printf("Usage: ./ceaser key\n");
}
}
int check_key(string argv)
{
int j = atoi(argv);
for(int i = 0, n = strlen(argv); i <= n; i++)
{
if(isdigit(argv[i]))
{
return 0;
}
}
return j;
}
Ответы (2 шт):
Автор решения: Sergey
→ Ссылка
В функции main попробуйте вот так:
int key;
if(argc != 2)
{
printf("Usage: ./ceaser key\n");
}
else
{
key = check_key(argv[1]);
if(isdigit(key))
printf("Succes\n");
else
printf("Error argv[1] = '%s'\n", argv[1]);
}
Это чисто по синтаксису. Но семантика этой программы осталась для меня загадочной...
Автор решения: Nikolas
→ Ссылка
В функции main вы вызываете функцию check_key в которую подаёте первый аргумент программы (кстати, нулевой аргумент не пустой). В случае если вы не зададите аргументы программы, то в функцию atoi попадёт нулевой указатель. Там то и проявится segfault.
А насчёт захода в else if. Не совсем понятен смысл вашей программы, но могу подсказать, что функция isdigit() в качестве аргумента принимает символ. Она проверяет является ли этот символ символом цифры. Например, '0' или '2'.