Я попытался написать код, который получает строку ввода, а затем изменяет содержащиеся гласные, если они есть, на определенные числа. Я еще не закончил, но я решил протестировать код, прежде чем продолжить, но я продолжаю получать эту ошибку. Пожалуйста помоги.
Вот код:
#include <cs50.h>
#include <stdio.h>
string replace_letter(string argv[1]);
int main(int argc, string argv[])
{
string replace = replace_letter(argv[1]);
if (argc != 1)
{
return 1;
}
else
{
printf("%s\n", argv[1]);
}
}
string replace_letter(string argv[1])
{
switch(argv[1])
{
case a:
printf(6);
break;
}
}
Этот код — прекрасная иллюстрация того, почему CS50 — такой плохой класс. Держитесь подальше от любых учебных материалов из Гарварда, они понятия не имеют, как правильно обучать программированию на C.
Я не согласен с утверждением кого-то другого не учиться у CS50. В целом, я думаю, что этот класс очень хорошо справляется с обучением C. Основная причина плохой репутации CS50 в Stack Overflow заключается в том, что он не сразу объясняет, что стоит за типом данных string
. Однако вы узнаете об этом на 4-й неделе CS50.
Вы дали параметру функции replace_letter
имя argv
. Это название вводит в заблуждение, потому что параметр argv
функции main
представляет собой массив строк, тогда как параметр функции replace_letters
должен быть одной строкой.
Если вы измените это вводящее в заблуждение имя на что-то более подходящее, например str
(сокращение от «строка»), тогда станет яснее, что не так в вашей функции replace_letter
:
string replace_letter(string str[1])
{
switch(str[1])
{
case a:
printf(6);
break;
}
}
Чтобы передать строку в качестве параметра функции replace_letter
, вы должны объявить параметр следующим образом:
string replace_letter(string str)
Используя
string replace_letter(string str[1])
вместо этого вы заявляете, что в качестве параметра передается массив строк, и неверно подразумеваете, что длина этого массива равна 1
(хотя число 1
в этом случае игнорируется компилятором). Это не то, что вы хотите.
При объявлении массива число в []
указывает размер массива, тогда как в обычном выражении вне объявления число в []
указывает индекс в массиве, к которому вы хотите получить доступ. Вы, кажется, путаете эти два значения.
Если вы сделаете описанное выше изменение, а также соответствующим образом измените предварительное объявление функции, то ваш код должен выглядеть так:
#include <cs50.h>
#include <stdio.h>
string replace_letter(string str);
int main(int argc, string argv[])
{
string replace = replace_letter(argv[1]);
if (argc != 1)
{
return 1;
}
else
{
printf("%s\n", argv[1]);
}
}
string replace_letter(string str)
{
switch(str[1])
{
case a:
printf(6);
break;
}
}
Это исправляет указанную вами ошибку.
Однако в программе есть еще другие проблемы, например
argc
только после вызова replace_letter(argv[1])
,case a:
вместо case 'a':
,printf(6);
вместо printf("6");
,str[1]
) иreturn
в функции replace_letter
, хотя эта функция объявлена возвращающей значение.Я оставлю это на ваше усмотрение, чтобы решить оставшуюся часть задания.
Нет ли другой ошибки или предупреждения от вашего компилятора? Как насчет
printf(6);
илиcase a:
?