2017-03-18 14 views
0

그래서 cin.get()을 사용하는 방법과 버퍼 사용 방법을 알고 있으므로 생각했습니다. 다음은 테이블에 대해 n (수 또는 행) 및 m (열 수)을 얻는 샘플 프로그램입니다. 그런 다음, n 개의 *의 m 문자를 취득하는 배열에 저장합니다하여 출력 :C++에서 cin.get()을 사용하여 줄 끝 문자를 얻는 방법

#include <bits/stdc++.h> 
using namespace std; 
int n, m; 
char in; 
char a[100][100]; 
int main() 
{ 
    cin >> n >> m; 
    for(int i = 0;i < n; ++i) 
    { 
     for(int j = 0;j < m; ++j) 
     { 
      cin.get(in); 
       a[i][j] = in; 
      if(j == m - 1) 
       cin.get(); 
     } 
    } 
for(int i = 0;i < n; ++i) 
{ 
    for(int j = 0;j < m; ++j) 
    cout <<a[i][j]; 
    cout << endl; 
} 
    return 0; 
} 

이 프로그램은 라인의 끝과 같은 일부 문자를 계산하는 것 같다. 누군가 그것을 고칠 수 있고 나를 설명 할 수 있습니다. 미리 감사드립니다.

+0

는 당신이 우리 입력 예를 뿌릴 수 CIN와 cin.get()를 >> 대체? – Christophe

+0

'#include '와'using namespace std; '는 위험한 책략입니다. g ++의 미리 컴파일 된 헤더와 함께 사용하기위한 전용이 아닌 표준 헤더를 사용하여 전체 표준 라이브러리 전체를 포함합니다. 그것은 당신이 충돌 할 수있는 많은 식별자입니다. 다행스럽게도'std' 네임 스페이스는 대학살을 방지합니다. 'using namespace std; '를 제외하고'string','swap','reverse'와 같은 일반적인 이름으로 수만개의 식별자가있는 지뢰밭을 만들어'std' 네임 스페이스를 지정할 필요를 없애고 숨어있는 기회를 기다리고 있습니다. 귀하의 프로그램을 폭파. – user4581301

+0

성능 노트 :'cout << endl;'은 개행과 함께 스트림의 플러시를 강요하기 때문에 꽤 비쌉니다. 속도가 필요하다면,'cout << '\ n';은 훨씬 빨라질 것입니다. 어쨌든 일반적인 원칙에서 벗어나지 않을 가치가 있습니다. – user4581301

답변

0

n과 m을 입력하면 cin.get()은 숫자 다음의 char에서 즉시 시작됩니다.이 번호는 공백이나 새 줄이 될 수 있습니다. 따라서 예상되는 입력과 얻은 입력 사이에 전환이있을 수 있습니다. 이로 인해 개행 문자가 아닌 모든 m 개 문자가 무시되고 다른 문자 대신 일부 개행 문자가 읽혀집니다.

숫자 추출 후 첫 번째 새 줄까지 cin.ignore() 문자가 더 안전합니다.

마찬가지로, 건너 뛰는 n 번째 문자가 예상 한 개행 문자인지 확인하십시오.

0

endl 및 공백 문자를 사용하지 않으려면 cin을 사용해야합니다.

그냥

#include <bits/stdc++.h> 
using namespace std; 
int n, m; 
char in; 
char a[100][100]; 
int main() 
{ 
    cin >> n >> m; 
    for(int i = 0;i < n; ++i) 
    { 
     for(int j = 0;j < m; ++j) 
     { 
      cin>>in; 
       a[i][j] = in; 
     } 
    } 
for(int i = 0;i < n; ++i) 
{ 
    for(int j = 0;j < m; ++j) 
    cout <<a[i][j]; 
    cout << endl; 
} 
    return 0; 
} 
+0

예이 부분을 수정했습니다! –