getchar () для исключения символов из ввода - PullRequest
0 голосов
/ 25 декабря 2018

Вот то, что я пытаюсь сделать: мой учитель дал мне задание, чтобы получить информацию от пользователя типа «1,2,3,4, -3,17, -9,0,5, -8,10 "и после того, как пользователь нажал клавишу ввода, программа должна игнорировать знаки", "и печатать максимальные и минимальные значения положительных и отрицательных чисел (каждого).теперь он сказал, что мы должны использовать getchar (), чтобы сделать это, но я не понимаю, как ... Я знаю, что эта функция используется для чтения одного символа от пользователя (и затем печатать его с помощью putchar ()), а не дляигнорируя символы, поэтому я хотел бы понять, как я должен использовать его для выполнения операций такого рода в цикле while.

Итак, для подведения итогов мой вопрос касается выборочного чтения ввода (другими вещами, которыми я сам буду управлятьхотя, если кто-то видит что-то в коде и может дать подсказку, я был бы рад, но я хотел бы понять функцию getchar (), чтобы сделать то, что я читаю, она предназначена для этого), я написал и удалил кодтысячи раз и не смог заставить его работать ... вот как это выглядит сейчас (и это не работает):

#include <stdio.h>
#include <stdlib.h>

int main(){

char enter = "\n";
int list_of_nums[100];
char ch1[100];
int neg_num[100];
int pos_num[100];

printf("please enter numbers separated by ',': \n");


while (getchar()!= enter) {
    scanf("%d" ,&list_of_nums;
    if (list_of_nums >= 0){
        getchar();
       pos_num.append(list_of_nums);
    }
    else{
                neg_num.append(list_of_nums);

        }
}



 int max_pos = max.pos_num[];
 int min_pos = min.pos_num[];
 int max_neg = max.neg_num[];
 int min_pos = min.neg_num[];

 printf("the maximum number of all the positives is: %d \n" ,max_pos);
 printf("the minimum number of all the positives is: %d \n" ,min_pos);
 printf("the maximum number of all the negatives is: %d \n" ,max_neg);
 printf("the minimum number of all the negatives is: %d \n" ,min_neg);


 return 0;



}

1 Ответ

0 голосов
/ 27 декабря 2018

На основании первого ввода выберите, что произойдет в следующем.Вот код для отрицательных чисел.Просто добавьте кейс с двузначными числами и оптимизируйте его:

#include <stdio.h>
#include <stdlib.h>
#define MAX_NUMBERS 100

int main(void){
    int list_of_nums[MAX_NUMBERS];
    int pos_nums[MAX_NUMBERS];
    int neg_nums[MAX_NUMBERS];
    int size = 0, size_pos = 0, size_neg = 0, i, max_pos, min_pos, max_neg, min_neg, neg_flag = 0;
    char input;

    printf("Enter numbers separated by ',':\n");

    do {
        input = getchar();
        if(input == '-') {
            neg_flag = 1;   //for negative numbers
            input = getchar();
        }
        if(input >= '0' && input <= '9') {
            if(neg_flag) {
                list_of_nums[size] = -(input - 48); //FROM ASCII CHARACTER CODE
            } else {
                list_of_nums[size] = input - 48;
            }
            neg_flag = 0;
            size++;
        } else {
            neg_flag = 0;
        }
    } while(input != '\n');

    for(i = 0; i < size; i++) {
        printf("%d ", list_of_nums[i]);
        if(list_of_nums[i] >= 0) {
            pos_nums[size_pos] = list_of_nums[i];
            size_pos++;
        }
        else {
            neg_nums[size_neg] = list_of_nums[i];
            size_neg++;
        };
    }
    printf("\n");

    max_pos = pos_nums[0];
    min_pos = pos_nums[0];
    for(i = 1; i < size_pos; i++) {
        if(max_pos < pos_nums[i]) max_pos = pos_nums[i];
        if(min_pos > pos_nums[i]) min_pos = pos_nums[i];
    }

    max_neg = neg_nums[0];
    min_neg = neg_nums[0];
    for(i = 1; i < size_neg; i++) {
        if(max_neg < neg_nums[i]) max_neg = neg_nums[i];
        if(min_neg > neg_nums[i]) min_neg = neg_nums[i];
    }

    printf("The maximum number of all the positives is: %d\n", max_pos);
    printf("The minimum number of all the positives is: %d\n", min_pos);
    printf("The maximum number of all the negatives is: %d\n", max_neg);
    printf("The minimum number of all the negatives is: %d\n", min_neg);

    return 0;
}

PS В будущем не отправляйте "нужна помощь с домашним заданием" вопросов, но попробуйте пойтинасколько это возможно при решении задачи.Таким образом, вы сможете представить более проработанный вопрос.

...