Почему не считывает числа из файла в переменную?
Надо для мой программы написать ввод котрый состоит из ключевого слова, а после слова будут значения, и почему то значения не вписываются в переменную, почему? пример ввода:
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 < 0) || (cmax < 0) || (m < 0)) {
printf("inncorect");
}
printf("%lld %lld %lld", cmax, cmin, m);
printf("\nyes\n");
}
if (x == 2) { //get_a
}
if (x == 3) { //lcg
}
if (x == 4) {//test
}
if (x == -1) {
printf("\ninncorect");
}
}
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Поскольку я с 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.