C 언어 프로 그래 밍 은 항상 18 개의 오류 소결 을 범한다

잘못된 절 차 를 보면 서 어떻게 고 쳐 야 할 지 모 르 겠 습 니 다. 저 는 C 에 대한 학습 을 통 해 C 프로 그래 밍 에서 자주 저 지 르 는 실 수 를 쌓 아 학생 들 에 게 참고 하도록 썼 습 니 다.
1. 식별 자 를 쓸 때 대소 문자 의 차 이 를 무시 합 니 다.
 
  
main()
{
  int a=5;
  printf("%d",A);
}

컴 파일 러 는 a 와 A 를 두 개의 서로 다른 변수 이름 으로 생각 하고 오류 정 보 를 표시 합 니 다.C. 대문자 와 소문 자 는 두 개의 서로 다른 문자 라 고 생각한다.습관 적 으로 기호 상수 명 은 대문자 로, 변수 명 은 소문 자로 표시 하여 가 독성 을 높 인 다.
2. 변수의 유형 을 무시 하고 비합법적 인 연산 을 했다.
 
  
main()
{
  float a,b;
  printf("%d",a%b);
}

% 는 잉여 연산 으로 a / b 의 전체 여 수 를 얻는다.정형 변수 a 와 b 는 잉여 연산 을 할 수 있 지만 실제 변 수 는 '잉여' 연산 을 할 수 없다.
3. 문자 상수 와 문자열 상수 가 혼 동 됩 니 다.
char c;c="a";
여기 서 문자 상수 와 문자열 상수 가 혼 란 스 럽 습 니 다. 문자 상수 는 한 쌍 의 작은 따옴표 로 묶 인 단일 문자 이 고 문자열 상수 는 한 쌍 의 작은 따옴표 로 묶 인 문자 시퀀스 입 니 다.C 는 '\' 를 문자열 로 끝 내 는 표 지 를 규정 하고 있 습 니 다. 시스템 에서 자동 으로 추가 되 기 때문에 문자열 'a' 는 실제 적 으로 두 개의 문 자 를 포함 합 니 다. 'a' 와 '\ 0' 은 문자 변 수 를 부여 해 서 는 안 됩 니 다.
4. '=' 과 '=' 의 차 이 를 무시 했다.
많은 고급 언어 에서 '=' 기 호 를 관계 연산 자 '와 같다.예 를 들 어 BASIC 프로그램 에서 if (a = 3) then 을 쓸 수 있 지만 C 언어 에서 '=' 은 할당 연산 자 이 고 '=' 은 관계 연산 자 입 니 다.예 를 들 어: if (a = = 3) a = b;전 자 는 a 가 3 과 같 는 지, 후 자 는 a 와 3 이 같 으 면 b 값 을 a 에 부여 하 겠 다 고 밝 혔 다.습관 문제 로 초보 자 들 은 종종 이런 실 수 를 한다.
5. 플러스 점 수 를 잊 었 습 니 다.
분 호 는 C 문장 에서 없어 서 는 안 될 일부분 으로 문장의 끝 에 반드시 분점 이 있어 야 한다.a = 1b = 2 컴 파일 시 컴 파일 러 는 'a = 1' 뒤에 분 호 를 발견 하지 못 하고 다음 줄 'b = 2' 도 이전 줄 문장의 일부분 으로 하면 문법 오류 가 발생 할 수 있 습 니 다.잘못 을 고 칠 때, 때때로 잘못 이 지 적 된 줄 에서 잘못 이 발견 되 지 않 으 면, 이전 줄 에서 분 호 를 빠 뜨 렸 는 지 확인 해 야 한다.
 
  
{
  z=x+y;
  t=z/100;
  printf("%f",t);
}

복합 문 구 는 마지막 문 구 는 마지막 분점 을 무시 하고 쓰 지 않 을 수 없다 (이것 은 PASCAL 과 다르다).
6. 점 수 를 더 주세요.다음 과 같은 복합 문장 에 대해:
 
  
{
  z=x+y;
  t=z/100;
  printf("%f",t);
};

복합 문장의 괄호 뒤에 점 수 를 더 해 서 는 안 된다. 그렇지 않 으 면 사족 을 그 릴 것 이다.또한: if (a% 3 = = 0);I++;
원래 3 을 a 로 나 누 면 I 에 1 을 더 합 니 다.그러나 if (a% 3 = = 0) 이후 에 점 수 를 더 했 기 때문에 if 문 구 는 여기 서 끝 납 니 다. 프로그램 은 I + 문 구 를 실행 합 니 다. 3 이 a 를 제거 하 든 안 하 든 I 는 자동 으로 1 을 추가 합 니 다.또한: for (I = 0; I < 5; I + +);{scanf("%d",&x);printf("%d",x);}
앞 뒤로 5 개의 수 를 입력 하고 한 개의 수 를 입력 한 후 출력 한 다 는 뜻 이다.for () 이후 에 하나의 분 호 를 더 해서 순환 체 를 빈 문장 으로 만 들 었 기 때문에 이 때 는 하나의 숫자 만 입력 하고 출력 할 수 있 습 니 다.
7. 변 수 를 입력 할 때 주소 연산 자 '&' 를 추가 하 는 것 을 잊 어 버 립 니 다.int a,b;scanf("%d%d",a,b);이것 은 비합법적 이다.Scanf 함수 의 역할 은 a, b 메모리 의 주소 에 따라 a, b 의 값 을 저장 하 는 것 입 니 다."& a" 는 a 가 메모리 에 있 는 주 소 를 가리킨다.
8. 데 이 터 를 입력 하 는 방식 이 요구 와 일치 하지 않 습 니 다.
①scanf("%d%d",&a,&b);입력 할 때 쉼표 로 두 데이터 간 의 구분자 가 될 수 없습니다. 아래 입력 이 합 법 적 이지 않 습 니 다.    3, 4 데 이 터 를 입력 할 때 두 데이터 사이 에 하나 이상 의 빈 칸 간격 으로 Enter 키, 점프 키 tab 를 사용 할 수 있 습 니 다.
②scanf("%d,%d",&a,&b);C 규정: '형식 제어' 문자열 에 형식 설명 외 에 다른 문자 가 있 으 면 데 이 터 를 입력 할 때 이 문자 와 같은 문 자 를 입력 해 야 합 니 다.아래 입력 은 합 법 적 입 니 다:    3, 4 이때 쉼표 를 사용 하지 않 고 빈 칸 이나 다른 문 자 를 사용 하 는 것 은 옳지 않다.    3, 4, 3: 4 또 다음 과 같다.    scanf("a=%d,b=%d",&a,&b);입력 은 다음 과 같 아야 합 니 다:    a=3,b=4
9. 입력 문자 의 형식 과 요구 가 일치 하지 않 습 니 다.'% c' 형식 으로 문 자 를 입력 할 때 '빈 칸 문자' 와 '전의 문자' 는 모두 유효 문자 로 입력 합 니 다.    scanf("%c%c%c",&c1,&c2,&c3);b c 입력
문자 "a" 는 c1, 문자 "는 c2, 문자" b "는 c3 에 게 보 냅 니 다.% c 는 한 글자 만 읽 으 라 고 요구 하기 때문에 뒤에 빈 칸 을 두 글자 의 간격 으로 사용 할 필요 가 없습니다.
10. 입 출력 된 데이터 형식 은 사용 하 는 형식 설명자 와 일치 하지 않 습 니 다.예 를 들 어 a 는 정형 으로 정의 되 었 고 b 는 실 형 으로 정의 되 었 다.    a=3;b=4.5;    printf("%f%d",a,b);컴 파일 할 때 오류 메 시 지 를 주지 않 지만 실행 결 과 는 원래 의 뜻 과 맞지 않 습 니 다.이런 잘못 은 특히 주의해 야 한다.
11. 데 이 터 를 입력 할 때 정 도 를 정 하려 고 합 니 다.    scanf("%7.2f",&a);이렇게 하 는 것 은 비합법적 이 므 로 데 이 터 를 입력 할 때 정밀 도 를 규정 할 수 없다.12. switch 구문 에 break 문 구 를 누락 합 니 다.예 를 들 어 시험 성적 의 등급 에 따라 100% 세그먼트 를 출력 한다.switch (grade) {case 'A': printf ("85 ~ 100"), case 'B': printf ("70 ~ 84"), case 'C': printf ("60 ~ 69"), case 'D': printf ("60"), default: printf ("error");} break 문 구 를 빠 뜨 려 서 case 는 레이 블 만 하고 판단 역할 을 하지 않 습 니 다.따라서 grade 값 이 A 일 때 printf 함 수 는 첫 번 째 문 구 를 실행 한 후에 두 번 째, 세 번 째, 네 번 째, 다섯 번 째 printf 함수 문 구 를 집행 합 니 다.정확 한 표기 법 은 각 갈래 뒤에 "break;" 를 더 해 야 한다.예 를 들 어 case 'A': printf ("85 ~ 100");break;
13. while 와 do - while 문장의 세부 적 인 차 이 를 무시 했다.
(1)main(){int a=0,I;scanf("%d",&I);while(I<=10){a=a+I;I++;}printf("%d",a);}
(2) main () {int a = 0, I; scanf ("% d", & I); do {a = a + I; I + +;} while (I < = 10); printf ("% d", a);} 를 보면 입력 I 의 값 이 10 보다 작 거나 같 을 때 두 사람 이 얻 은 결 과 는 같다.그리고 I > 10 시 에 두 사람의 결 과 는 다르다.while 순환 은 먼저 판단 한 후에 실행 되 고 do - while 순환 은 먼저 실행 한 후에 판단 하기 때문이다.10 이상 의 수 while 순환 에 대해 서 는 순환 체 를 한 번 도 실행 하지 않 고, do - while 문 구 는 순환 체 를 한 번 실행 해 야 한다.
14. 배열 을 정의 할 때 변 수 를 잘못 사용 합 니 다.int n;scanf("%d",&n);int a[n];배열 이름 뒤에 괄호 로 묶 은 것 은 상수 표현 식 으로 상수 와 기호 상수 를 포함 할 수 있 습 니 다.즉, C 는 배열 의 크기 를 동적 으로 정의 할 수 없습니다.
15. 배열 을 정의 할 때 정 의 된 '요소 개수' 를 사용 할 수 있 는 최대 아래 값 으로 오인 합 니 다.main () {static int a [10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; printf ("% d", a [10);} C 언어 규정: 정의 할 때 a [10 으로 a 배열 에 10 개의 요소 가 있 음 을 나타 낸다.그 아래 표 시 된 값 은 0 으로 시작 되 기 때문에 배열 요소 a [10] 는 존재 하지 않 습 니 다.17. 주소 연산 자 를 추가 하지 말 아야 할 위치 에 주소 연산 자 를 추가 했다.    scanf("%s",&str);C 언어 컴 파일 시스템 의 배열 이름 에 대한 처 리 는 다음 과 같다. 배열 이름 은 이 배열 의 시작 주 소 를 대표 하고 scanf 함수 의 입력 항목 은 문자 배열 이름 이 므 로 주소 부 를 추가 할 필요 가 없다.다음 으로 변경 해 야 합 니 다.    scanf("%s",str);
18. 형 삼 과 함수 중의 국부 변 수 를 동시에 정의 했다.int max(x,y)int x,y,z;{z = x > y? x: y; return (z);} 형 삼 은 함수 체 외 에서 정의 해 야 하고 국부 변 수 는 함수 체 내 에서 정의 해 야 한다.int max (x, y) int x, y 로 변경 해 야 합 니 다.{  int z;  z=x>y?x:y;  return(z);}

좋은 웹페이지 즐겨찾기