-1
다음 코드의 fscanf 함수는 다음 패턴으로 이동하지 않고 동일한 패턴을 파일에서 반복해서 찾습니다. 이 문제를 어떻게 해결할 수 있습니까?fscanf()는 루프에서 같은 패턴을 반환합니다.
void checkInput(char *fileName, int time, int* totalProcesses)
{
FILE *input;
int startTime;
int pid;
int prio;
int vruntime = 50;
input = fopen(fileName, "r");
do
{
fscanf(input, "%i start %i prio %i", &pid, &startTime, &prio);
if(startTime == time)
{
createProcess(pid, startTime, vruntime);
totalProcesses++;
printf("%s\n %i", "proccess created", pid);
}
} while (!feof(input));
fclose(input);
}
을 의미 대신 당신이 뭔가를해야합니다. 아마도'fscanf'의 반환 값을 검사해야합니다. 'fileName'에서의 입력 예제는 좋을 수도 있습니다 ... –
예를 들어 콜론이 시간 필드에서 나타나거나'start'가 한 번 잘못 되었기 때문에 코드가 문제가되는 경우 또는 비슷한, 당신은 처리의 동일한 지점에서 반복적으로 실패 할 것입니다. 'fscanf()'의 반환 값을 확인해야합니다. 반환 값이 0, 1 또는 2로 실패하면 다시 시도하기 전에 줄 끝까지 읽는 것이 좋습니다. 라인 기반의 입력 ('fgets()')과'sscanf()'를 사용한다면 문제의 원인을 출력 할 수 있습니다. fscanf()가 그것의 일부를 소비했을 때 그것을하는 것이 훨씬 더 어렵다. –
또한 [ 'while (! feof (file))'은 항상 잘못되었습니다.] (https://stackoverflow.com/questions/5431941/) -이 코드도 예외는 아닙니다. –