21-1.
[getchar 함수와 putchar함수의 활용]
##잘못된 코드
int ch;
int diff = 'a' - 'A';
ch = getchar();
if ('A' <= ch <= 'Z') {
ch += diff;
putchar(ch);
}
else if ('a' <= ch <= 'z') {
ch -= diff;
putchar(ch);
}
else {
printf("알파벳 이외 문자를 입력하셨습니다.");
}
아...!! &&를 이용안하고 착각해서 저렇게 썼구나..
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int Change();
int main() {
int ch1;
ch1 = getchar();
ch1=Change(ch1);
if (ch1 == -1) {
fputs("이건 오류다!!",stdout);
}
else {
putchar(ch1);
}
return 0;
}
int Change(int ch) {
if ('a' <= ch && ch <= 'z') {
return ch - 32;
}
else if ('A' <= ch && ch<= 'Z') {
return ch + 32;
}
else {
return -1;
}
}
21-2.
1번
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void RemoveBSN(char str[]) {
int len = strlen(str);
str[len - 1] = 0;
}
int main() {
int i;
int sum = 0;
char str[20];
char temp[1];
fputs("문자열을 입력하시오: ", stdout);
fgets(str, sizeof(str), stdin);
RemoveBSN(str);
for (i = 0; i < strlen(str); i++) {
if (str[i] >= '1' && str[i] <= '9') {
temp[0] = str[i];
sum += atoi(temp);
}
}
printf("합은 %d이다.", sum);
return 0;
}
-> int atoi함수는 const char * str을 인자로 받기 때문에 임시 배열을 설정해서 그 str의 요소 값을 넣은 다음 그 임시 배열을 인자로 atoi에 넣는다.
->나의 실수: atoi의 인자에 str[i]를 입력하였다(str[i]는 값이기때문에 배열 이름을 넣어야 한다)
->이때 strlen은 널문자는 길이에 포함하지 않는다. 하지만 fgets을 통해 str을 입력받았기 때문에 줄바꿈('\n')도 같이 입력받아서 그걸 없애고자 RemoveBSN함수를 생성한 것이다.
ex)char str[]="1234567";
->strlen(str)을 하면 7 출력
2번
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
char str1[20];
char str2[20];
char str3[40];
fputs("str1 문자열을 입력하세요:", stdout);
fgets(str1, sizeof(str1), stdin);
str1[strlen(str1) - 1] = '\0';
fputs("str2 문자열을 입력하세요:", stdout);
fgets(str2, sizeof(str2), stdin);
str2[strlen(str2) - 1] = '\0';
strncpy(str3, str1, sizeof(str1));
strcat(str3, str2,sizeof(str2));
puts(str3);
return 0;
}
-> 나의 실수: fgets은 '\n'까지 입력받기 때문에 strncpy함수와 strcat으로 이어붙일거라 없애기 위해 str1[strlen(str1)-1]='\0'으로 줄바꿈 자리에 널문자를 대입하면 되는데 착각해서 while(getchar()!='\n')을 이용했다.
-> 나의 실수: fgets은 어차피 sizeof(str)을 통해 마지막은 널문자가 입력되도록 되어 있다. 근데 착각해서 입력받는 str 마지막 자리에 널문자를 또 입력하는 바보같은 행동을 했다.
3번
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void comparename();
void compareage();
int main() {
char str1[20];
char str2[20];
fputs("첫 번째 사람의 이름과 나이를 입력하세요:", stdout);
fgets(str1, sizeof(str1), stdin);
str1[strlen(str1) - 1] = 0;
fputs("두 번째 사람의 이름과 나이를 입력하세요:", stdout);
fgets(str2, sizeof(str2), stdin);
str2[strlen(str2) - 1] = 0;
int len1 = strlen(str1);
int len2 = strlen(str2);
comparename(str1, str2,len1,len2);
compareage(str1, str2,len1, len2);
return 0;
}
void comparename(char str1[], char str2[],int len1, int len2) {
char temp1[20] = { 0 };
char temp2[20] = { 0 };
int i;
for (i = 0; i < len1; i++) {
if(str1[i]!=' '){
temp1[i] = str1[i];
}
}
for (i = 0; i < len2; i++) {
if (str2[i] != ' ') {
temp2[i] = str2[i];
}
}
if (!strcmp(temp1, temp2)) {
puts("두 사람의 이름은 같습니다.");
}
else {
puts("두 사람의 이름은 같지 않습니다.");
}
}
void compareage(char str1[], char str2[], int len1, int len2) {
char temp1[20];
char temp2[20];
int i;
int cnt1 = 0;
int cnt2 = 0;
for (i = 0; i <len1; i++) {
if (str1[i] != ' ') {
cnt1++;
}
}
for (i = cnt1; i < len2; i++) {
temp1[i] = str1[i];
}
for (i = 0; i < len1; i++) {
if (str1[2] != ' ') {
cnt2++;
}
}
for (i = cnt2; i < len2; i++) {
temp2[i] = str2[i];
}
if (!strcmp(temp1, temp2)) {
puts("두 사람의 나이는 같습니다.");
}
else {
puts("두 사람의 나이는 같지 않습니다.");
}
}
'C' 카테고리의 다른 글
220809(CH25) (0) | 2022.08.09 |
---|---|
220802(CH23) (0) | 2022.08.02 |
220726(CH13,18) (0) | 2022.07.26 |
220721(CH16) (0) | 2022.07.26 |
220714(CH10) (0) | 2022.07.14 |