Нахождение самых больших и самых маленьких чисел с помощью atoi
scanf("%1c%2c %d %d %d %d %d %d %d %d %d %d",
&x, &y, &arr[0], &arr[1], &arr[2], &arr[3], &arr[4],
&arr[5], &arr[6], &arr[7], &arr[8], &arr[9]);
strcpy(string, x);
value1 = atoi(string);
strcpy(string, y);
value2 = atoi(string);
value_final = value1 + value2;
Я пытаюсь получить значения ASCII для -l
или же -s
затем пропустите их через switch
с добавленными значениями ascii, но я получаю ошибки при использовании atoi
и я не уверен, если вы должны добавлять значения ascii, когда пользователь вводит -l
или же -s
или если это другой способ сделать это?
1 ответ
У вашего кода есть несколько проблем:
- Major:
switch
случаи не имеютbreak;
пункт. Контроль попадает в следующий пункт и, наконец, вdefault
заявление. - Major: твоя путаница в шоу между
char
массивы и переменные с одним символом:strcpy(string, x);
не должен даже компилироваться. - Ваш метод для разбора
-l
или же-s
очень запутанный и, вероятно, ошибочный. Вы должны использовать литералы символов. - Вам не нужен двойной цикл, чтобы найти самый маленький или самый большой элемент в массиве. Достаточно одного цикла, и
printf
Оператор должен быть вне цикла.max
а такжеmin
неинициализированы, циклы вызывают неопределенное поведение. - название говорит, используя
atoi()
: если это было ваше назначение, вы не должны использоватьscanf()
,
Вот упрощенная версия:
int main(void) {
char option[3], buffer[32];
int i, min, max, value;
min = max = 0;
if (scanf("%2s", option) == 1) {
for (int i = 0; i < 10 && scanf("%31s", buffer) == 1; i++) {
value = atoi(buffer);
if (i == 0) {
min = max = value;
} else {
if (min > value)
min = value;
if (max < value)
max = value;
}
}
if (!strcmp(option, "-l")) {
printf("output: The largest number is %d\n", max);
return 0;
} else
if (!strcmp(option, "-s")) {
printf("output: The smallest number is %d\n", min);
return 0;
}
}
printf("You have entered an invalid option, try again next time.\n");
return 0;
}