본문 바로가기

알고리즘 문제/C언어

[C언어] 용돈기입장(ver1) 만들기 _ 실행안됨..

어제 저녁

교수님이 갑자기 오셔서

너도해~ 하고 가셨다......

그래서 한다.........................

 

그래서 용돈기입장이 뭐냐

뭘 만들어야 되냐... 모르겠다

 

나는 용돈 기입장을 써본적이 없다

경제관념이 없기 때문이다

이히히

날짜(date) 내용(text) 수입(inm) 지출(outm) 합계(hap)
2020.11.11. 알바비 100000 0 100000
2020.11.11. 1111기념 담배 0 4500 95500
2020.11.12. 네임스티커 0 1000 94500
2020.11.13. 학식수 0 4500 90000
2020.11.13. 몬스터에너지 0 9000 81000
2020.11.14. 특별 장학금 100000 0 181000
2020.11.14. 기념 파티 0 10000 171000
2020.11.14. 젤리 0 500 170500

뭐 이런거라고 한다.

 

--------

일단 

 

1. 문제 정의

날짜, 내용, 수입, 지출을 입력받아서 합계 계산하고 표처럼 출력하는것.

 

2. 입출력 정의 (+ c언어는 char로 선언해야함. 파이썬 습관 버려랑..)

입력 : 날짜(str[]), 내용(str[]), 수입(int[]), 지출(int[])

출력 : 날짜(str[]), 내용(str[]), 수입(int[]), 지출(int[]), 합계(int[])

 

3.

솔직히 아직 ns-chart 그리는 법을 모르겠다. 아래에 보충설명 해둠.

date, yesdragon, su_ip, ji_chool은 배열로 선언. hap은 int 값으로만 선언. hap이 음의 값이 나오면 경고하기.

while문 돌려서 입력받고 while문 돌아간거 count 해서 for문으로 다시 출력하기.

원하는 만큼 while문으로 쭉 입력받다가 break 땡기고 for문으로 출력.

 

4. 코드짜기

#include <stdio.h>

void main() {
	char date[100], yesdragon[100];
	int su_ip[100], ji_chool[100];
	int hab = 0;
	int i = 0;

	while (1) {
		printf("날짜, 내용, 수입, 지출 순으로 입력하세요.\n");
		printf("break는 0 네개 입력\n");
		scanf_s("%c %c %d %d", &date[i], &yesdragon[i], &su_ip[i], &ji_chool[i]);

		if (date[i] == '0') {
			i--;
			break;
		}

		//여기 브레이크 어케걸지 모르게따...★
		
		i++;
	}

	printf("날짜     내용          수입    지출	\n");
	for (int j = 0; j <= i; j++) {
		hab = su_ip[j] - ji_chool[j];
		printf("%c %c %d %d %d", date[j], yesdragon[j], su_ip[j], ji_chool[j], hab);
	}

}

이 코드 왜 안돌아갈까 ? 

[예외 발생(0x0FD2D4EC(ucrtbased.dll), lW.exe): 0xC0000005: 0x01340000 위치를 기록하는 동안 액세스 위반이 발생했습니다..]] 라는 오류가 뜬다.

 

이 오류를 scanf_s 써서 해결해봤다.

 

+)scanf는 미리 입력값의 사이즈를 알린다.

#include <stdio.h>

void main() {
	char date[100], yesdragon[100];
	int su_ip[100], ji_chool[100];
	int hab = 0;
	int i = 0;

	while (1) {
		printf("날짜, 내용, 수입, 지출 순으로 입력하세요.\n");
		printf("break는 0 네개 입력\n");
		scanf_s("%c ", &date[i], sizeof(date[i]));
		scanf_s("%c ", &yesdragon[i], sizeof(yesdragon[i]));
		scanf_s("%d ", &su_ip[i], sizeof(su_ip[i]));
		scanf_s("%d", &ji_chool[i], sizeof(ji_chool[i]));

		if (date[i] == '0') {
			i--;
			break;
		}

		
		i++;
	}

	printf("날짜     내용          수입    지출	\n");
	for (int j = 0; j <= i; j++) {
		hab = su_ip[j] - ji_chool[j];
		printf("%c %c %d %d %d", date[j], yesdragon[j], su_ip[j], ji_chool[j], hab);
	}

}

이제 돌아는 간다. 

 

출력이 왜 이렇게 될까.... "0 0 0 0"해도 break가 안된다.

 

그건 그렇데 치고 이부분 코드도 엉망이다. 

for (int j = 0; j <= i; j++) {
		hab = su_ip[j] - ji_chool[j];
		printf("%c %c %d %d %d", date[j], yesdragon[j], su_ip[j], ji_chool[j], hab);
	}

수정하자.

for (int j = 0; j <= i; j++) {
		if (hab == 0) {
			hab = su_ip[j] - ji_chool[j];
		}
		else {
			hab = hab + su_ip[j] - ji_chool[j];
		}
		
		printf("%c %c %d %d %d", date[j], yesdragon[j], su_ip[j], ji_chool[j], hab);
	}

고쳐봤다.

 

 나한테 왜그럴까 정말

 

#include <stdio.h>

void main() {
	char date[100], yesdragon[100];
	int su_ip[100], ji_chool[100];
	int hab = 0;
	int i = 0;

	while (1) {
		printf("날짜, 내용, 수입, 지출 순으로 입력하세요.\n");
		printf("break는 0 네개 입력\n");
		scanf_s("%c ", &date[i], sizeof(date[i]));
		scanf_s("%c ", &yesdragon[i], sizeof(yesdragon[i]));
		scanf_s("%d ", &su_ip[i], sizeof(su_ip[i]));
		scanf_s("%d", &ji_chool[i], sizeof(ji_chool[i]));

		if (date[i] == '0') {
			i--;
			break;
		}

		
		i++;
	}

	printf("날짜     내용          수입    지출	\n");
    
	for (int j = 0; j <= i; j++) {
		if (hab == 0) {
			hab = su_ip[j] - ji_chool[j];
		}
		else {
			hab = hab + su_ip[j] - ji_chool[j];
		}
		
		printf("%c %c %d %d %d", date[j], yesdragon[j], su_ip[j], ji_chool[j], hab);
	}

}
728x90

'알고리즘 문제 > C언어' 카테고리의 다른 글

[C언어] 별찍기 세트  (0) 2020.11.20
[C언어] 버퍼란?  (0) 2020.11.16
[C] 소수(prime number) 출력 프로그램  (0) 2020.11.11
[c언어] x자 별찍기  (0) 2020.11.11
[2019 icpc seoul 예선] H번 Four Squares  (0) 2020.09.23