저는 C 프로그래밍에 익숙하지 않으며 계속이 오류가 발생합니다. 이전에는 나이가 두 배 였으므로 fscanf를 % lf와 함께 사용하고 있었지만 fgets로 바꾼 이후로 double을 허용하는 방법을 모르겠습니다. 구조체를 읽으려고합니다.fgets를 사용하여 구조체에 double을 저장하십시오.
오류 : '더블'의 char * '하지만 인수 유형 인
저는 C 프로그래밍에 익숙하지 않으며 계속이 오류가 발생합니다. 이전에는 나이가 두 배 였으므로 fscanf를 % lf와 함께 사용하고 있었지만 fgets로 바꾼 이후로 double을 허용하는 방법을 모르겠습니다. 구조체를 읽으려고합니다.fgets를 사용하여 구조체에 double을 저장하십시오.
오류 : '더블'의 char * '하지만 인수 유형 인
fgets
시도 기대는 fgets 의 인수 1 호환되지 않는 유형
double age; ... while(fgets(Employees[i].age, 10, input) != 0)
날이 오류를 제공합니다 : 여기 내 관련 코드입니다 double
값에만 관심이 있기 때문에 상황에 맞지 않는 텍스트 행을 읽습니다.
while(fscanf(input, "%lf", &Employees[i].age) == 1)
당신은 또한 fgets()
를 사용하여 텍스트의 전체 라인을 읽은 다음으로 구문 분석을 시도 할 수 있습니다 :
그래서 그 대신 fgets
를 사용하여, 당신은 double
형식 문자열로 fscanf
를 사용하는 것이 좋습니다 값은 sscanf()
입니다.
sscanf()
은 fscanf()
과 scanf()
처럼 작동합니다. 단, 첫 번째 매개 변수는 문자 포인터입니다.
줄 번호별로 오류를보고하거나 sscanf()
이 실패하면 다른 형식 문자열을 사용하여 줄을 변환하는 등 한 번에 한 줄 전체를 읽으면 특정 작업을 더 쉽게 수행 할 수 있습니다.
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main()
{
char buffer[1024];
const size_t buffer_size = sizeof(buffer);
int line_number = 0;
while(fgets(buffer, buffer_size, stdin)) {
size_t len = strlen(buffer);
double value;
line_number++;
if(buffer[len-1] == '\n') {
buffer[len-1] = '\0';
len--;
}
if(sscanf(buffer, " %lf", &value) != 1) {
fprintf(stderr, "stdin:%d: Unable to read value: \"%s\" makes no sense.\n", line_number, buffer);
exit(EXIT_FAILURE);
}
printf("Successfully read value %lf\n", value);
}
return EXIT_SUCCESS;
}
'는 fgets()가'문자열 ('숯불 *')하지 더블을 읽
재미를 위해 예
. 당신은'fscanf()'또는'strtod()'와 같이 read 문자열을'double'으로 후 처리 할 수도 있습니다. – twalberg