Новый пользовательский ввод для какой переменной в цикле for - PullRequest
0 голосов
/ 10 октября 2019

Я делаю программу, которая принимает числа в качестве входных данных и сравнивает их друг с другом, чтобы найти самое низкое. Так как я не хочу делать это

printf("Enter a number: ");
scanf("%d", &a);

три раза, так как это требует времени, я подумал сделать это с помощью цикла for. Я сделал один раз, я знаю, что он не идеален, так как он не делаетчто я на самом деле ищу.

Что я ожидаю, так это то, что цикл проходит через печать printf, принимает «a» в качестве пользовательского ввода, снова печатает инструкцию и теперь принимает переменную «b» какпользовательский ввод и после завершения цикла он перейдет к условным.

Заранее большое спасибо :)

#include <stdio.h>
#include <math.h>

void min(){
    int a, b, c;

    for (int i = 1; i <= 3; i++){
        printf("Enter a number: ");
        scanf("%d %d %d", &a, &b, &c);
    }
    if (a < b && a < c){
        printf("This number: %d is the lowest one.\n", a);
    }
    else if (b < a && b < c){
        printf("This number: %d is the lowest one.\n", b);
    }
    else if (c < a && c < b){
        printf("This number: %d is the lowest one.\n", c);
    }
    else{
        printf("Error. You might have entered a floating point number or a character. Please check again\n");
     }
}

int main() {

     min();
     return 0;
}

Ответы [ 2 ]

0 голосов
/ 10 октября 2019

Не нужно инициализировать 3 переменные. Вы можете использовать временную переменную и присвоить ее индексу массива.

#include <stdio.h>
#include <math.h>

void min(){
    int arr[3], temp;

    for (int i = 0; i <= 2; i++){
            printf("Enter a number: ");
            scanf("%d", &temp);
            arr[i]=temp;
    }

    if (arr[0] < arr[1] && arr[0] < arr[2]){
            printf("This number: %d is the lowest one.\n", arr[0]);
    }
    else if (arr[1] < arr[0] && arr[1] < arr[2]){
            printf("This number: %d is the lowest one.\n", arr[1]);
    }
    else if (arr[2] < arr[0] && arr[2] < arr[1]){
            printf("This number: %d is the lowest one.\n", arr[2]);
    }
    else{
            printf("Error. You might have entered a floating point number or a character. Please check again\n");
    }
}

int main() {
    min();
    return 0;
}
0 голосов
/ 10 октября 2019

Как указано в комментариях выше, вы читаете 3 переменные за одну итерацию, таким образом, читая 9 раз. Кроме того, вы не можете написать разумный элегантный код для чтения a, b и c в цикле, так как вам нужно было бы сделать if или переключатели, чтобы определить, какую переменную читать, принимая индекс i вaccount.

Было бы лучше использовать вместо этого массив int:

    int a[3];

Тогда вы прочитали бы внутри своего цикла:

    for (int i = 0; i < 3, i++)
    {
        printf("Enter a number: ");
        scanf("%d", &a[i]);
    }

также обратите внимание, что выпотребуется выполнить итерацию с [0..2]!

Затем использовать a[0], a[1] и a[2] вместо a, b и c.

...