어제 저녁
교수님이 갑자기 오셔서
너도해~ 하고 가셨다......
그래서 한다.........................
그래서 용돈기입장이 뭐냐
뭘 만들어야 되냐... 모르겠다
나는 용돈 기입장을 써본적이 없다
경제관념이 없기 때문이다
이히히
날짜(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.
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);
}
}
'알고리즘 문제 > 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 |