Страница 1 из 1

застряла в цикле while. нужно с файла считать число, которое стоит перед английской С

Добавлено: 19 май 2017, 21:56
bstrd6

Код: Выделить всё

int main() 
{ 
FILE *fp; 
float farengheit; 
int i = 0, C = 0, g, a = 0, size = 100, newNum; 
char curstr[100] = ""; 
char *filename = "C:\\Users\\User\\Desktop\\lab.txt"; 





if (!fopen_s(&fp, filename, "r")) 
while (fscanf_s(fp, "%c", curstr[size]) != EOF) 
{ 


for (i = 0; i < size; i++) 

{ 
g = i; 
newNum = 0; 
a=0;
if (curstr[i] = 'C') 
{ 
while ((curstr[g] != ' ') && curstr[g] != '\n' && (g >= 0)) 
{ 

if (((int)curstr[i] < (int)'0') && ((int)curstr[i] > (int)'9')) 
a++; 
 
} 


if (a == 0) 
{ 

for (g; g<i; g++) 
newNum = (((int)curstr[g] - 48) * pow(10, g - 1)); 
a++; 
} 
printf("%d", newNum); 
} 
} 

getchar(); 
return 0; 
} 
else 
{ 
printf_s("can`t open this"); 
} 
}

Re: застряла в цикле while. нужно с файла считать число, которое стоит перед английск

Добавлено: 19 май 2017, 23:19
Romeo
Во-первых, обращение к curstr[size] некорректно, так как у массива элементы имеют индексы от 0 до size-1.
Во-вторых, функция fscanf должна принимать адрес памяти, в которую она будет записывать результат, ты же ей передаёшь значение.

Re: застряла в цикле while. нужно с файла считать число, которое стоит перед английск

Добавлено: 20 май 2017, 08:34
bstrd6
Romeo писал(а):Во-первых, обращение к curstr[size] некорректно, так как у массива элементы имеют индексы от 0 до size-1.
Во-вторых, функция fscanf должна принимать адрес памяти, в которую она будет записывать результат, ты же ей передаёшь значение.

То есть мне нужно написать ..., curstr, size?

Re: застряла в цикле while. нужно с файла считать число, которое стоит перед английск

Добавлено: 20 май 2017, 11:16
Romeo
Нет, нужно начинать обход c size-1, а не с size.
По второму пункту вопросов не возникло?

Посмотрел оставшийся код... там вообще чёрт ногу сломит. Что вообще он должен был делать по задумке? В таком виде, в котором он сейчас записан он работать не будет. Недостаточно поправить отдельные места, код нужно просто полностью переписать.

Re: застряла в цикле while. нужно с файла считать число, которое стоит перед английск

Добавлено: 20 май 2017, 16:12
bstrd6
Romeo писал(а):Нет, нужно начинать обход c size-1, а не с size.
По второму пункту вопросов не возникло?

Посмотрел оставшийся код... там вообще чёрт ногу сломит. Что вообще он должен был делать по задумке? В таком виде, в котором он сейчас записан он работать не будет. Недостаточно поправить отдельные места, код нужно просто полностью переписать.

Перевести все мерные температуры из цельсия в фаренгейт. Пример: 210C = 410F

Re: застряла в цикле while. нужно с файла считать число, которое стоит перед английск

Добавлено: 20 май 2017, 18:53
Romeo
В общем, на твоём месте я бы это полностью переписал, так как в программе огромное количество ошибок.

Если же ответа требует вопрос, почему ты не выходишь из внешнего while, то ответ прост. Функция fscanf возвращает количество прочтённых байт. А так как оно будет всегда либо 1, либо 0, то условие никогда не выполнится, так как EOF обычно равен -1.