У меня возникли проблемы с выяснением того, как этот код работает. Предполагается, что в зависимости от аргументов, выданных из командной строки, предполагается распечатать приветствие.Командная строка Аргумент
int main (int argc, char *argv[]) {
double testscore;
if (argc == 2) {
printf("Hello, Mr.%s.\n", argv[1]);
}
else if (argc == 3 && argc == testscore) {
testscore = atof(argv[2]);
printf("Hi, Mr.%s, your score is %.1f\n", argv[1], testscore);
}
else {
printf("My name is %s %s.\n", argv[1], argv[2]);
}
}
Если кто-то ставит только свою фамилию, то терминал распечатает ...
Здравствуйте, г-н last_name
... потому что они только положить в одном аргумент. Это прекрасно работает.
Часть, в которой я застрял, является аргументом командной строки == 3
. Если 3 аргументы приведены, то либо терминал, предполагают, чтобы распечатать ...
Привет, мистер last_name, ваш счет тест test_score
... или ...
Меня зовут first_name last_name.
Если я ставлю в аргументы командной строки только последнее имя и оценка теста (Smith 3,4), то он печатает (например, используя фамилию Smith), то он печатает ...
Меня зовут Смит 3.4
Однако, это работает для ввода имени и фамилии (Джон Смит). Это дает ...
Меня зовут Джон Смит.
Я не хочу ответ, я просто хочу, что я делаю неправильно и подсказки о том, как это исправить.
"Начинаясь с C++" Тони Гэддисом, верно? В любом случае, спасибо за то, что вы не просили код прямо. Это редкость среди новичков. – CodeMouse92
Это простая опечатка. Вы тестируете 'argc == testscore', который тестирует ** количество аргументов ** по счету. Таким образом, второе условие никогда не будет оцениваться истинным (за исключением какой-то странной случайности). – CodeMouse92
'testscore' неинициализирован, поэтому вы не можете с пользой сравнить его, прежде чем устанавливать его. Вероятно, вы должны попытаться преобразовать 'argv [2]' с 'atof()' ('strtod()' будет лучше, но сложнее получить право) и сравнить результат с 0.0. Это немного лениво, но, вероятно, разумно предположить, что если результат равен нулю, 'argv [2]' не содержит числа, поэтому рассматривайте его как имя. (Более тщательная работа будет использовать 'strtod()' и проверить, было ли найдено число, такое как 0.) Возможно, вам захочется подумать, что произойдет, если программе не переданы аргументы командной строки или если они переданы из 20 из них. Вы должны проверить? –