Почему моя функция не принимает массив в C?

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

Вот пример.

$ ./substitution VCHPRZGJNTLSKFBDQWAXEUYMOI
      plaintext:  hello, world
      ciphertext: jrssb, ybwsp

Как видите, он заменяет его в алфавитном порядке. V заменит A, C заменит B, H заменит C и так далее.

У меня вопрос: почему мои функции не принимают массив?

Мой код:

#include <cs50.h>
#include <stdio.h>
#include <ctype.h>
#include <string.h>

bool alphabetic_char_checker(string word);

string alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

int main(int argc, string argv[])
{

    if (argc != 26)
    {
        printf("The key must contain 26 characters.\n");
        return 1;
    }
    if (alphabetic_char_checker(argv[]) == false)
    {
        printf("The key must only contain alphabetic characters.");
        return 1;
    }
}


bool alphabetic_char_checker(string word[])
{
    for (int i = 0, w = strlen(word[]); i < w; i++)
    {
        word[i] = toupper(word[i]);
        if (word[i] < 'a' || word[i] > 'z')
        {
            return false;
        }
    }
    return true;
}
if (argc != 26) Это неправильно. Сделайте базовую отладку. Запустите вашу программу в отладчике или даже просто добавьте операторы отладочной печати, чтобы увидеть значение argc. Затем просмотрите книгу / руководство по C по аргументам командной строки.
kaylum 10.04.2021 00:35

В настоящее время ваш код выдает несколько ошибок компиляции; пожалуйста, сначала исправьте их.

SuperStormer 10.04.2021 00:37

Что вообще такое string? Это недопустимый код C.

Marco Bonelli 10.04.2021 00:37

Намек: if (argc > 0 && strlen(argv[1]) != 26)

tadman 10.04.2021 00:37

@MarcoBonelli Наверное, это жалкая зараза CS50.

tadman 10.04.2021 00:38

C11 проект стандарта n1570: 6.7.6.3 Деклараторы функций (включая прототипы) 7 Объявление параметра как «массив типа» должно быть скорректировано на «квалифицированный указатель на тип», где квалификаторы типа (если есть) - те, которые указаны в [ и] производного типа массива [...]

EOF 10.04.2021 00:39

@MarcoBonelli Если бы у меня было больше энергии, я бы направил большую часть ее на полное уничтожение CS50 и исключение его из истории.

tadman 10.04.2021 00:39

Вы прописываете каждую букву в слове, затем сверяете ее с word[i] < 'a' || word[i] > 'z') в нижнем регистре.

Allan Wind 10.04.2021 00:45

@tadman Бро, мой профессор так и сделал. imgur.com/YTNtPhq

Rohan Muppa 10.04.2021 01:33

Ваш профессор входит в клику CS50, а? Мне жаль слышать, что тебе пришлось пережить это. Тест argc == 2 важен. Не говорите предполагать, что argc - это что-нибудь, пока вы его не протестируете.

tadman 10.04.2021 01:34

Помните, что такие вещи, как isalpha(), уже существуют.

tadman 10.04.2021 01:35

Вы предполагаете, что argc - это какая-то длина строки. Это не так. Это количество предоставленных аргументов. argv[0] присутствует всегда, это имя самого исполняемого файла. Первый «реальный» аргумент - это argv[1], что означает, что argc (аргумент считать) должен быть 2. ./myprog a b c означает, что argc - это 4, как в четыре отдельных аргумента, включая имя команды.

tadman 10.04.2021 01:38

@tadman О, хорошо, спасибо!

Rohan Muppa 10.04.2021 01:39

Ранее я уже отмечал необходимость strlen(), как в длина строки, не путать с количество аргументов. C не так уж и запутан. Это действительно очень, очень примитивно, и если вы ожидаете от него слишком многого, то можете запутаться. По замыслу все довольно просто. Во всяком случае, в некоторых случаях слишком просто.

tadman 10.04.2021 01:40

@tadman Как сделать так, чтобы моя функция принимала аргумент командной строки [] в качестве входных данных?

Rohan Muppa 10.04.2021 01:44
alphabetic_char_checker(argv[]) - это ерунда. alphabetic_char_checker(argv[1]) - это ответ.
tadman 10.04.2021 01:45

@tadman Большое спасибо! Это было очень полезно.

Rohan Muppa 10.04.2021 02:01
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
17
38
0

Другие вопросы по теме