독립적 인 학습에 관한 간단한 참고 사항 : 표준 라이브러리 기능을 처음으로 사용하는 경우 해당 설명서를 적어도 한 번 읽어야합니다. 그 이유는 어떤 문제 (또는 유용한 기능)에 대해 아는 즉시 해당 문제를 피하는 (또는 유용한 기능을 사용하는) 방법을 알게 될 것이기 때문입니다. 매뉴얼을 읽으면 실제로 모든 잠재력을 배우고 C의 함정을 피하는 데 도움이됩니다.
처음으로 읽은 내용을 완전히 이해하지 못할 수도 있습니다. 너를 괴롭히지 마라. 그냥 계속 읽으십시오. 이런 일이 발생하면 페이지 하단에있는 내용을 다시 읽은 다음 두 번째로 완전히 이해하려고 시도하는 것이 좋습니다. 최소한 the fscanf manual을 한 번 이상 읽으십시오.
지금은 외딴 곳입니다. 여기저기서 ^ 위 첨자를 볼 수 있습니다. 제 의도는 위에 링크 된 매뉴얼을 읽고 이해함으로써 배웠을 사실에 주석을 달기위한 것입니다.
형식 지정자 %s
은 가능한 한 공백이 아닌 공백을 최대한 많이 사용하기 전에 공백을 버립니다. ^. 4 바이트의 공백 문자를 입력한다고 가정하면, 출력에는 4 바이트의 공백 문자가 없습니다.
"This uses four spaces" translates to "This uses four spaces".
이이 문제를^를 확장 프로그램 사양을 위반 논리적 보인다. 아마도 ^ 대신 %[
형식 지정자를 사용해야합니다. 이 경우 빈 줄은 일치 실패로 간주되어 줄의 대상이 불확실하므로 scanf
의 더 좋은 결과를 처리해야합니다. ^ (어쨌든 권장합니다).이 루프의 길이와 문제의 단순함에서
#include <stdio.h>
int main(void) {
char line[512];
int x;
do {
x = scanf("%511[^\n]", line);
if (x == 0) {
/* Match failure caused by inputting an empty line. Print empty line? */
putchar('\n');
}
else if (x == 1) {
/* Success. */
puts(line);
}
/* Read and discard the remainder of a line */
do { x = getchar(); } while (x >= 0 && x != '\n');
} while (x != EOF);
}
, 당신은 이것에 대한
scanf
를 사용하는 것은 아마
문제를 해결하기 위해 잘못된 방법 것을 추론 할 수 있습니다. 배열
scanf
에 대한 호출을
line
제거하고 가장 안쪽 루프의 파생을 사용하여 오류 확인
scanf
오류 검사를 제거 할 수 있습니다. 이 같은 것이 멋지게 보입니다.
#include <stdio.h>
int main(void) {
int c;
do {
c = getchar();
} while (c >= 0 && putchar(c) >= 0 && c != '\n');
}
PS. getchar, putchar 및 many other standard things에 대한 설명서도 있습니다.
'input'은'a'에 값을 저장하고있는 것을 의미합니까, 아니면 명령 행 인수를 의미합니까? –
"% s"을 사용하면 printf에 공백을 넣으라고합니다. – Duck
[가능한 공백을 어떻게 스캔합니까?] (http://stackoverflow.com/questions/6853789/how-do-i-scan-spaces-into-aa-string) – dasblinkenlight