나는 꿈의 자동차, 차고 목록, 차량 목록을 저장하는 텍스트 파일을 만들 수 있도록 프로그램을 작성하고 있습니다. 나는 fgets와 sscanf를 사용하여 사용자에게 make, then, then, then, value, then color를 물어 보았다. 그러나 어떤 이유로 모델을 가져 오는 사용자 입력 단계를 건너 뛰고 값을 묻는 것으로 점프하지만 여전히 값을 입력하기 위해 printf 위에 "자동차 모델 입력 :"의 printf를 표시합니다. 아래 코드는 내 fgets/sscanf 함수를 포함하고있는 코드에서 발췌 한 것입니다. 출력의 예가 될 것이므로 내 설명이 명확하지 않은 경우 문제가 무엇인지 볼 수 있습니다.프로그램 fgets 및 sscanf를 사용하여 사용자 입력 기회를 건너 뜁니다.
if (!listappend){
printf("File nonexistent/inaccessible.");
return 1;
}
memset(colorin, 0, sizeof(colorin));
memset(makein, 0, sizeof(makein));
memset(modelin, 0, sizeof(modelin));
memset(yearin, 0, sizeof(yearin));
memset(valuein, 0, sizeof(valuein));
printf("\nEnter car make: ");
fgets(makein, sizeof(makein), stdin);
sscanf(makein, "%[^\n]",makein);
fprintf(listappend, "\n%s", makein);
printf("\nEnter car manufacture year: ");
fgets(yearin, sizeof(yearin), stdin);
sscanf(yearin, "%d", &yearinf);
printf("\nEnter car model: ");
fgets(modelin, sizeof(modelin), stdin);
sscanf(modelin, "%[^\n]",modelin);
fprintf(listappend, "\n%s", modelin);
printf("\nEnter approximate car value: $");
fgets(valuein, sizeof(valuein),stdin);
sscanf(valuein, "\n%f", &valueinf);
fprintf(listappend, "\n%d %'.2f", yearinf, valueinf);
printf("\nEnter car color: ");
fgets(colorin, sizeof(colorin), stdin);
sscanf(colorin, "%[^\n]",colorin);
fprintf(listappend, "\n%s", colorin);
fclose(listappend);
샘플 출력 : 당신이 볼 수 있듯이
|-|-|-|-|-|-|-|-|-|-|Car-lection List|-|-|-|-|-|-|-|-|-|-|
----------------------------------------------------------
[A]dd New Car [V]iew List
[M]enu [D]eveloper Info
[C]lear List [Q]uit
Option?
A
Enter car make: Honda
Enter car manufacture year: 2000
Enter car model:
Enter approximate car value: $5000
Enter car color: Blue
Option?
V
Entry Year Color Make Model Color Approx. Value
1| 2000 Blue Honda, approximate value: $5,000.00
, 사용자는 입력에 자동차 모델 수 있어야하지만, 프로그램이 바로 입력 할 수있는 기회를 건너 뛰는, 대략 차 값을 요청합니다 자동차 모델 정보. 그리고 여기가 car_list.txt의 고양이, 텍스트 파일은 내가 읽을 수 있도록하기 위해 문자열과 값을 저장 :
cat car_list.txt
Honda
2000 5,000.00
Blue
그것이 내가 낭비에 대해 사과 바보 같은 실수 그래서 만약 내가 C 프로그래밍에 새로 온 당신 시간, 그러나 그것은 나를 미치게했다. 당신의 도움에 미리 감사드립니다! sscanf()
에
형식 문자열이 줄 바꿈 문자로 끝나지 않으므로 위의 모든'printf()'호출 바로 다음에'fflush (stdout)'이 필요합니다. 그리고 입력을 요청하기 전에 프롬프트를 보지 못할 수도 있습니다. –
코드가 완전하지 않지만 sscanf (modelin, "% [^ \ n]", & modelinf)를 의미합니까? 세 번째 매개 변수를 참고하십시오 ... –
'sscanf (makein, "% [^ \ n]", makein);와 같은 것들 또한 매우 의심 스럽습니다. 스캔중인 문자열과 동일한 문자열을 쓰고 있습니다. 여기서 수행하면 안됩니다. C99 이상에서는 형식 문자열을'restrict'로 한정합니다. 이것은 다른 포인터를 통해 해당 객체에 액세스하는 정의되지 않은 동작을 의미합니다. 여기에서 수행중인 작업입니다. –