이전 기사 :
C ++ 11 표준 및 이전 버전에서는 여전히 gets
읽기를 사용할 수 있지만 C ++ 14는 gets
이 안전하지 않은 읽기를 공식적으로 삭제 합니다. 읽기는 자동으로 공백을 무시하기 때문에 공백이있는 문자열을 처리하려면 다른 읽기 기능이 필요합니다.
특정 독서 방법 :
하나, 문자 배열
ㅏ,std::cin.getline(str, size)
#include<iostream>
int main() {
char str[100];
std::cin.getline(str, 100);
std::cout << str << "\n";
return 0;
}
인덱스 0 0 에서 시작할 수 있음을 의미합니다.0 은99 99까지 읽기 시작9 9 자, 마지막 문자는'\0'
getline
줄 바꿈 용으로 예약되어있으며 읽기를 중지하고 줄 바꿈을 필터링합니다.
비,std::cin.get(str, size)
#include<iostream>
int main() {
char str[100];
std::cin.get(str, 100);
std::cout << str << "\n";
return 0;
}
참고 :
cin.get()
및 cin.get(str, size)
cin.get()
모든 문자로 읽을 수 있습니다
cin.get(str, size)
줄 바꿈이 끝난 읽고, 줄 바꿈은 여전히 버퍼에 손실됩니다하지 필터 랩.
다음 프로그램에서 버퍼에 남아있는 개행 문자는 모든 다음 get
판독 값을 무효화 합니다 .
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
char s1[10], s2[10], s3[10];
cin.get(s1, 10);
cin.get(s2, 10);
cin.get(s3, 10);
cout << strlen(s1) << " : "<< s1 << "\n";
cout << strlen(s2) << " : "<< s2 << "\n";
cout << strlen(s3) << " : "<< s3 << "\n";
return 0;
}
산출:
100
3 : 100
0 :
0 :
솔루션 : get
읽기가 완료된 후 다시 사용 get
하여 줄 바꿈을 수동으로 필터링 하십시오 .
cin.get(str, 100).get();
씨,scanf("%[^\n]", str)
그리고 get
필터를 감싸지 않습니다. 구체적인 작업은 다음과 같습니다.
#include<cstdio>
int main()
{
char str[100];
scanf("%[^\n]", str); getchar();
printf("%s\n", str);
return 0;
}
유사한 오류가 없는지 확인하려면 모든 오류 scanf
뒤에 getchar
필터 개행 문자 가 오는 것이 좋습니다 .
디,fgets(str, size, stdin)
gets
read-in 보안 문제 를 해결하기 위해 read-in fgets
의 최대 길이를 추가 size
하지만 fgets
개행 문자를 읽습니다. 다음과 같이 :
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
char str[10];
fgets(str, 10, stdin);
for(int i = 0; i < strlen(str); ++i) {
if(str[i] == '\n') printf("x");
else printf("%c", str[i]);
}
return 0;
}
작업 결과 :
input:
123
output:
123x
따라서 개행 문자가 필요하지 않으면 개행 문자를 str[strlen(str)-1]='\0'
제거 할 수 있습니다 .
두, string
클래스
ㅏ,getline(std::cin, s)
#include<iostream>
#include<string>
int main()
{
std::string s;
getline(std::cin, s);
std::cout << s << "\n";
return 0;
}