В приведенном ниже коде я пытаюсь проверить, является ли каждый символ в массиве строк алфавитным или нет, создавая логическую функцию. Но когда я запускаю программу, моя функция bool не проходит через массив строк, а проверяет только первый символ в массиве строк. Дальнейшая отладка также показывает, что функция действительно не обрабатывает массив строк.
p.s. это тест, который я провел для решения проблемы CS50.
#include <cs50.h>
#include <string.h>
#include <ctype.h>
#include <stdio.h>
bool only_alpha(string a);
int main(void)
{
string s = get_string("String: ");
if (only_alpha(s))
{
printf("Yes\n");
}
else
{
printf("No\n");
}
}
bool only_alpha(string a)
{
int q = strlen(a);
//check if each char in string is alphabetical
for(int i = 0; i < q; i++)
{
if (isalpha(a[i]))
{
return true;
}
else
{
return false;
}
}
return 0;
}
это то, что я получаю, когда запускаю программу. введите сюда описание изображения
Раньше я использовал циклы for и не знаю, что делаю не так, и начинаю думать, что это проблема VScode (после нового обновления), потому что я использовал именно этот код (но с isdigits ). Пожалуйста помоги!!!
@ImanAbdollahzadeh Это фейспалм CS50. Новичков учат делать typedef char* string;
... и да, это ужасно.
Пожалуйста, добавьте в свой вопрос текст в виде форматированного текста вместо отображения изображения или обычного текста.
Сейчас самое время отказаться от привычки использовать однобуквенные имена переменных. Вместо этого используйте что-нибудь значимое. Ваш код будет лучше для этого.
Никаких изображений текста, пожалуйста
Логика неправильная, вы всегда return
при проверке первой буквы, независимо от того, какая она была. Вместо этого вам следует вернуться к первой недопустимой букве или, если недействительных букв не обнаружено, вернуть true
в конце:
for(int i = 0; i < q; i++)
{
if (!isalpha(a[i]))
{
return false;
}
}
return true;
о, я вижу, вы возвращаете bool из функции слишком рано. Прямо сейчас он проверит, является ли первый символ строки only_alpha
алфавитным или нет? если не? на основе пользовательского ввода он вернет a[0]
/true
и немедленно завершит цикл.
Вместо этого замените цикл на это:
bool only_alpha(string a)
{
int q = strlen(a);
for(int i = 0; i < q; i++)
{
if (!isalpha(a[i]))
{
return false;
}
}
return true;
}
Что такое
string
в вашем коде? Выtypedef
делали это раньше?