C언어

C언어

C언어 정리1

C언어 정리1 학교 공부하면서 미흡했던 부분을 정리했다. 나중에 시간을 들여 다시 다듬어서 작성할 예정임. 헤더파일 : 외부소스 파일에 정의된 변수나 함수에 대한 레퍼런스 #include -> 헤더파일 부분에는 ; 붙이면 안됨 rand() rand() % 10 : 0~9랜덤 rand() % 10 + 1 : 1~10랜덤 system("cls"); 콘솔창 지우기 system("timeout 1 > NULL"); 1초 대기 system("timeout -1 > NULL"); 엔터 칠 때마다 다음 명령 수행 srand((unsigned)time(NULL)); rand()함수는 결과의 순서가 정해져 있으므로 srand와 함께 써야함. rand()사용전에 한번만 사용하기. sqrt(7) -> 루트 7 if문, 반복..

C언어

while문에서 continue 사용 시 에러, 문제가 발생하는 경우

while문에서 continue 사용 시 에러, 문제가 발생하는 경우 반복문에서 조건문을 통해 특정 케이스에 대해 continue를 걸게 되면 continue 아래의 코드는 수행되지 않고 다음 케이스로 넘어간다. #include int main() { int sum = 0; for (int i = 1; i n=7 -> continue 인 상황이 반복되었기 때문이었다. for문은 형식상 증감문을 빠뜨릴 일이 잘 없지만 while문은 증감문을 무시하는 경우가 많아 이러한 실수를 많이 하게 된다. #include int main(){ int sum = 0; int n = 1; while (n

C언어

[C언어] 문자열 복사 strcpy 함수

[C언어] 문자열 복사 strcpy 함수 저장할 문자열의 길이를 파악하여 딱 그 길이만큼 다른 배열에 복사하는 함수가 있다. string.h 헤더를 사용하는 strcpy함수이다. strcpy(arr1, "apple"); 첫 번째 인수인 배열에 두 번째 인수의 값을 대입한다고 생각하면 된다. 단, 첫 번째 인수에 배열이 아니라 문자열이 들어가면 안 된다. 컴파일은 되지만 문제가 생길 수 있다. 양쪽에 배열을 넣는 것은 가능하다. strcpy(arr1, arr2); arr1에 arr2의 값을 집어넣을 것이다. #include #include int main(void){ char arr1[80] = "cat"; char arr2[80]; strcpy(arr1, "tiger"); strcpy(arr2, arr1..

C언어

[C언어] 백준 2798 : 블랙잭

https://www.acmicpc.net/problem/2798 2798번: 블랙잭 첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장 www.acmicpc.net 배열을 이용하는 문제는 항상 시행착오가 있다. 런타임 오류가 나거나 선언을 잘못하거나 값을 잘못 입력하거나 하면 코드가 완전히 다 꼬여버리더라. 이번에는 3가지의 카드를 어떻게 뽑아야 하는지부터 난관이었다. 카드를 뽑는 것이기 때문에 중복은 없어야 했고, 모든 경우의 수를 굳이 다 반복문으로 돌려볼 필요는 없다고 생각했다. 1차 시도 #include int main..

C언어

[C언어] char 배열 선언시 주의사항

char 배열 선언시 저장할 문자열의 길이보다 최소한 하나 이상 크게 배열을 선언해야한다는 점을 명심하자. 여분의 공간, 문자열의 마지막에 널 문자(/0)를 저장해야 하기 때문이다. char arr1[3], arr2[3]; scanf("%s %s", arr1, arr2); printf("%s %s",arr1,arr2); 입력 >> 123 456 456 배열 크기를 3으로 잡아놓고 입력값 길이를 3으로 주었기 때문에 결과값이 이상하게 나온다. char arr1[4], arr2[4]; scanf("%s %s", arr1, arr2); printf("%s %s",arr1,arr2); 입력 >> 123 456 123 456 널 문자는 아스키 코드 값이 0인 문자를 말하며 문자 상수로는 /0으로 표현된다. 문자열..

C언어

[C언어] 문자 입출력 함수 getchar(), putchar()

stdio.h 헤더를 사용하는 입출력 함수들이다. getchar()는 입력을 받고, putchar()는 문자를 출력한다. #include int main() { char text=0; while(text != EOF) { text=getchar(); putchar(text); } return 0; } 이러면 종료가 될때까지 입력한 값을 그대로 출력하는 작업을 반복한다. (EOF는 -1의 값과 같으며 end of file, 즉, 파일이 끝날때라는 조건의 역할을 수행한다. 파일이 끝날 방법이 없는 코드이므로 계속 진행된다.) getchar()와 scanf()함수의 차이는? getchar()는 문자형 데이터 하나를 입력 받을 수 있다. 따라서 getchar()는 scanf("%d %d %d",&a,&b,&c)..

C언어

[C언어] 백준 1157 : 아스키 코드를 이용한 문자형 정수 변환

https://www.acmicpc.net/problem/1157 1157번: 단어 공부 알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다. www.acmicpc.net 입력한 단어에서 가장 많이 사용된 알파벳의 대문자를 출력하는 문제. 예를들어 Mississipi라는 단어는 ?를, zZa라는 단어는 Z를 출력하도록 한다. 아스키 코드표를 참고해서 풀 수 있었다. 표를 보면 대문자 A~Z -> 65~90이고 소문자 a~z -> 97~122까지의 값을 가지게 된다는 것을 확인할 수 있다. 소문자를 대문자로 변환하기 위해서 97~122사이의 값을 받았을 때 32를 빼면 65~90사이의 소문자 범위로 ..

C언어

[C언어] : scanf()함수 입력 무시 문제, 버퍼링

scanf("%d\n", &a); 가끔 이걸 쓸 때 빌드하고 터미널에서 값을 입력하면 이상하게도 그냥 무시되는 경우가 있었다. 그리고는 다시 문자나 문자열 입력을 요구하기도 한다.특히 연속으로 scanf 사용하는 경우에 문제가 발생하는 경우가 많다. scanf() 함수는 데이터를 입력 받을 때 버퍼를 이용하는데, 버퍼에 가져올 값이 없으면 사용자에게 데이터를 입력 받게 하기 위해 모니터 화면에 커서를 깜빡거리게 한다.그리고 사용자가 키보드로 데이터를 입력한 후 Enter를 치면, 그 때 입력한 데이터와 Enter값이 한꺼번에 키보드 버퍼에 들어가게 된다. * 버퍼 참고 예시 코드) #include int main(void) { int a; char b; scanf("%d", &a); scanf("%c",..

C언어

[C언어] : 변수 초기화와 쓰레기 값 발생

자바같은 경우는 변수를 스스로 초기화 시키지 않아도 지가 알아서 0으로 초기화 시키기 때문에 상관없지만, c언어에서는 변수 선언과 함께 그 전에 메모리에 있던 아무 의미 없는 쓰레기 값이 딸려 나올 수 있다. 변수 선언 시에 할당 받은 메모리 공간을 그 전에 다른 프로그램에서 사용하고 있었다면, 그 프로그램이 종료되었더라도 실제 메모리에 저장되었던 데이터가 남아 있기 때문에 변수를 초기화 하지 않으면 이런 현상이 발생한다고 한다. 백준 문제를 예로 들면 이와 같다. https://www.acmicpc.net/problem/1546 1546번: 평균 첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 둘째 줄에 세준이의 현재 성적이 주어진다. 이 값은 100보다 작거나 같은..

lazarus0320
'C언어' 카테고리의 글 목록