0

Надо для мой программы написать ввод котрый состоит из ключевого слова, а после слова будут значения, и почему то значения не вписываются в переменную, почему? пример ввода:

get_c 10 457 8
    #include <stdio.h>
    #include <stdlib.h >  
    #include <string.h>
    #include <math.h>
    #include <locale.h>
    #pragma warning(disable : 4996)
int proverka(char *y) {
    int com1[] = { 'g', 'e' , 't', '\_', 'c', '\0' }, com2[6] = { 'g', 'e', 't', '\_', 'a', '\0' }, com3[] = { 'l', 'c', 'g', '\0' }, com4[] = { 't','e','s','t','\0' };
        //printf("%c", y[4]);
    for (int i = 0; i < 5; i++) {
        if (y[i] == com1[i]) {
            if (y[4] == 'c') return 1;
            if (y[4] == 'a') return 2;
        }
        if (y[i] == com3[i]) {
            return 3;
        }
        if (y[i] == com4[i]) {
            return 4;
        }
        else return -1;
    }

} int main(){ setlocale(LC_ALL, "Rus"); FILE* in, *out; in = fopen("input.txt", "r"); out = fopen("output.txt", "w"); char y[81], per[80]; fscanf(in, "%s", y); fgets(per, 80, in); int i=0, flag = 0; while (y[i++] != 0 && i < 81) { //считывает из скольки букв состоит слово flag++; } if (flag > 5 || flag <3) { printf("inncorect"); } else { //printf("%d\n", flag); int x = proverka(y); if (x == 1) { //get_c long long cmax = 0, cmin = 0, m = 0; while (!feof(in)) { fscanf(in, "%lld", &cmax); //не считывает числа которые ввожу fscanf(in, "%lld", &cmin); fscanf(in, "%lld", &m);

            }
            if ((cmin &lt; 0) || (cmax &lt; 0) || (m &lt; 0)) {
                printf(&quot;inncorect&quot;);

            }
            printf(&quot;%lld %lld %lld&quot;, cmax, cmin, m);
            printf(&quot;\nyes\n&quot;);
        }
        if (x == 2) { //get_a
                        }
        if (x == 3) { //lcg

        }
        if (x == 4) {//test

        }
        if (x == -1) {
            printf(&quot;\ninncorect&quot;);
        }
    }

Harry
  • 221,325
Fewgesto
  • 15
  • 5
  • fscanf(in, "%s", y); fgets(per, 80, in); — вы уже считали строку полностью, что вы еще хотите из нее считать?... Не к вопросу, но за такое while (!feof(in)) джунам копчик массируют! – Harry Jul 20 '22 at 15:24
  • @Harry а спасибо, а можно как то считать до первого числа? это надо делать через цикл да? а все поняла спасибо большое можете написать как ответ я отмечу его – Fewgesto Jul 20 '22 at 15:25
  • @Harry а почему за такое так.... как правильно? через EOF? – Fewgesto Jul 20 '22 at 15:28
  • У вас идет слово без пробелов и три числа? Ну и читайте fscanf(in,"%s %lld %lld %lld",y,&cmax,&cmin,&m); – Harry Jul 20 '22 at 15:28
  • @Harry спасибо больше еще раз ! – Fewgesto Jul 20 '22 at 15:29
  • В комментарии дана ссылка, перейдите по ней и читайте... – Harry Jul 20 '22 at 15:29
  • @Harry а все поняла... спасибо – Fewgesto Jul 20 '22 at 15:29

1 Answers1

1

Поскольку я с proverka() в комментарий не влезу, дам ответом. А поскольку ответ на незаданный вопрос плохо...

По вашему вопросу: я бы просто читал строку как

fscanf(in,"%s %lld %lld %lld",y,&cmax,&cmin,&m);

Но еще я бы переписал вашу proverka() — уж очень она странно выглядит...

int proverka(const char *y)
{
    const char * com[4] =
    {
        "get_c", "get_a", "lcg", "test"
    };
    for(int i = 0; i < 4; i++)
        if (strcmp(y,com[i]) == 0) return i+1;
    return -1;
}

Еще — вам совсем не нужно смотреть, сколько символов считано в слово y — при неверном результате proverka() просто вернет -1. Ну и вместо длинной лесенки if'ов можно воспользоваться switch-case.

Harry
  • 221,325