#include<stdio.h>
#include<string.h>
int main()
{
char buffer[40];
while(1){
printf("$ ");
scanf("%s",buffer);
printf("%s:%d\n",buffer,strlen(buffer));
}
return 0;
}
1. 길이 40인 char형 배열을 선언.
2. while문을 돌며 buffer에 문자열입력.
3.입력받은 문자열과,문자열의 길이 출력.
*문제점
1) scanf는 단어 단위로 입력을 쓰다보면 공백문자를 기준으로 단어 하나하나를 입력받는다.
따라서 입력한 모든 문자열이 공백이 사이에껴있으면 입력한 모든 문자열을 통째로 인식을 하지않고 공백문자까지만 인식을 한다.
2)배열 길이 40이상을 벗어나서 입력받아도 출력은 가능해진다. 길이도 세진다.
그러나 복잡한 코드로 바뀔시 문제가 생길 가능성이 높아진다.
이 문제를 해결하고자 코드를 조금 바꿔보았다.
#include<stdio.h>
#include<string.h>
int main()
{
char buffer[40];
while(1){
printf("$ ");
gets(buffer);
printf("%s:%d\n",buffer,strlen(buffer));
}
return 0;
}
1. scanf를 gets로 바꾸어서 입력을 해보았다.
2.공백 문자가 있어도 통째로 읽는다.
3.입력한 모든 문자를 읽어서 출력한다.
4.여기까지 필요한건 써도된다. 그러나 배열의 길이에 제한을 두고 싶으면 코드를 바꿔야한다.
5.배열의 길이를 벗어나도 모든 문자를 입력받고 출력하기 때문이다.
#include<stdio.h>
#include<string.h>
#define BUFFER_SIZE 10
int main()
{
char buffer[BUFFER_SIZE];
while(1){
printf("$ ");
fgets(buffer,BUFFER_SIZE,stdin);
printf("%s:%d\n",buffer,strlen(buffer));
}
return 0;
}
1.또 다른 입력인 fgets로 바꿔보았다.
2.매개변수가 3가지 필요하다. 입력을 하여 저장할 배열변수,배열길이,입력 이다.
3.stdin은 키보드 표준 입력을 뜻한다.
4.배열의 길이까지 제한을 두고 싶을때 사용한다.
*문제점
1)fgets는 마지막에 줄바꿈 문자가 자동적으로 들어간다.
2)배열의 길이는 제한이 되어 잘리나, 마지막 줄바꿈 문자까지 자동적으로 저장되어 개수까지 세어져서 출력이되어버린다.
#include<stdio.h>
#include<string.h>
#define BUFFER_SIZE 10
int main()
{
char buffer[BUFFER_SIZE];
while(1){
printf("$ ");
fgets(buffer,BUFFER_SIZE,stdin);
buffer[strlen(buffer)-1]='\0';
printf("%s:%d\n",buffer,strlen(buffer));
}
return 0;
}
마지막 줄바꿈 문자를 없애서 자동줄바꿈이
되지 않게 하기위하여
buffer[strlen(buffer)-1]='\0";
버퍼의 길이 마지막 숫자를 뉴라인에서 null로
바꿔버리면 자동줄바꿈과 뉴라인까지 개수를
세지않고 문자열의 길이만 세어져서 출력한다.
#include<stdio.h>
#include<string.h>
#define BUFFER_SIZE 10
int main()
{
char buffer[BUFFER_SIZE];
while(1){
printf("$ ");
read_line(buffer,BUFFER_SIZE);
printf("%s:%d\n",buffer,strlen(buffer));
}
return 0;
}
int read_line(char str[], int limit){
int ch, i =0;
while((ch= getchar()) != '\n')
if(i<limit)
str[i++]=ch;
str[i] ='\0';
return i;
}
1.read_line함수에서 입력을 읽어서 str에 저장 입력되는 개수가 limit개가 넘지않도록 매개변수 설정.
2.한 문자씩 읽으면서 뉴라인이 아닌동안 while문을 돌면서 배열의 크기가 limit이므로 i가 limit개가 넘지 않도록 읽은 char을 배열에
저장하고 그다음 i가 증가하도록 한다.
3.\n을 읽게되면 와일문을 빠져나와서 i 번째 자리에 null문자를 입력한다.
4.실제로 읽은 개수 i를 리턴해준다.
**이 코드를 쓰게되면 아무리 많은 문자열을 입력해도 지정해놓은 배열의 길이 내에서만 문자열의 길이를 읽고 그 배열의 길이 내에 담긴 문자열만 출력하게 된다. ㅋ
'프로그래밍 > 자료구조' 카테고리의 다른 글
자료구조 공부하기 추상 데이터 타입 (0) | 2016.12.30 |
---|---|
자료구조 공부하기 자료구조란? 알고리즘이란? (0) | 2016.12.30 |
자료구조 메모리,포인터,변수 예제 (0) | 2016.12.30 |
동적 메모리 할당 (0) | 2016.12.30 |
문자열 (0) | 2016.12.30 |