Я не могу понять, что не так в моем коде, когда дело доходит до первого scanf во время цикла, я ввожу число, и оно просто останавливается там.Программа останавливается при сканировании
Если я положил printf («Что-то»); после этого scanf он не печатается, поэтому он не является бесконечным циклом. Также программа не просто замерзает, когда я заходила в диспетчер задач, она обрабатывает процессор, поэтому он что-то делает.
Моя программа должна нагружать резисторы и вычислять их параллельный эквивалент, пока я не набираю «done», а затем распечатываю вычисленное число.
#include <stdio.h>
#include <stdlib.h>
typedef struct o{char om[20];}RESISTOR;
int finish(char *s)
{
if(s[0]=='d' && s[1]=='o' && s[2]=='n' && s[3]=='e' && s[4]==0)
return 0;
else return 1;
}
int power(int n, int pows)
{
int expo=1;
while (pows)
{
expo*=n;
pows--;
}
return expo;
}
int convert(char *s)
{
int broj,c;for(c=-1;s[c];c++);
for(int i=0;s[i];i++)
{broj+=(s[i]-0x30)*power(10,c-i);}
return broj;
}
double paralel(double old, int new)
{
double num;
num=((double)new*old)/(old+(double)new);
return num;
}
int main()
{
int n=0;double para;
RESISTOR *p=(RESISTOR *)malloc(1*sizeof(RESISTOR));
int *convertnum=(int *)malloc(1*sizeof(int));
do
{
printf("R%d= ",n+1);
scanf(" %s", (p+n)->om);
convertnum[n]=convert((*(p+n)).om);
if(n==0) para=convertnum[n];
else if (finish((*(p+n)).om)) para=paralel(para,convertnum[n]);
n++;
if(finish((*(p+n-1)).om))
{
p=(RESISTOR *)realloc(p, n*sizeof(RESISTOR));
convertnum=(int *)realloc(convertnum, n*sizeof(int));
}
}while(finish((*(p+n-1)).om));
printf("\n");printf("\n");
printf("Re= %.2f",para);
free(p);free(convertnum);
printf("\n");
return 0;
}
'for (c = -1; s [c]; C++);' accesses 's [-1]', который может быть 0, что означает, что 'ci' в' power (i, ci) 'отрицательно , и, следовательно, 'while (pows) {pows -}' должен пройти через 2^64 петли, которые могут занять некоторое время. Ваша программа не должна принимать измеримое время процессора. Btw, вы делаете 'n ++' в 'do..while', обращаясь к' convertnum [n] ', но вы только' malloc (1 * sizeof (int)) '. О, 'printf (« Something \ n »);' после того, как scanf должен показать некоторый вывод. – Kenney
Ах, правильно. Я не думал об этом, мне нужно было уменьшить c, поэтому я положил его туда. Это заставляет программу работать нормально и показывать другие ошибки: D. Вы должны были ответить им. – Nebeski
Также n равно 0, поэтому как преобразовать num [0] в проблему? В первом цикле я имею в виду. – Nebeski