realeyes923   3달 전

실행을 해보니까 10개씩 끊어서 출력하는 것을 잘 되는것 같습니다.

하지만 어떻게 프로그램을 종료해야하는지를 잘 모르겠습니다...

ctrl+z를 눌러도 종료가 되질 않습니다ㅠ

string으로 해서 문제를 해결하고 싶은데

고수님들 자세한 답변 부탁드리겠습니다!!ㅠ

sang7   3달 전

사용자 입력을 받아서 테스트 하시는 거 같으신데요.


파일 입출력으로 한번 사용해 보세요. 

gallopsys   3달 전

C의 scanf 함수는 C++의 std::string을 입력받지 못하므로, scanf를 사용하고 싶으시면 std::string 대신에 char []를 사용하여 해결해야 합니다.

첫 번째 방법은 string s;를 char s[11];로 바꾸시고, scanf는 아무런 인자도 입력받지 않을 경우 -1을 반환하므로 scanf가 -1이 아닐 때까지 반복해야 종료됩니다.

그러므로 scanf("%10s", s) != -1 혹은 ~scanf("%10s", s) [1의 보수화]로 바꿔주시면 정답일 겁니다.


두 번째 방법은 말 그대로 C++을 이용하는 방법으로, std::cin 객체를 이용하시면 됩니다.

std::cin의 객체 멤버 함수로 width라는 함수가 들어있습니다. 예를 들어 std::cin.width(10)이라고 하면, 10개씩 입력받도록 하는 것이죠.

문제는 std::cin.width(std::streamsize _Newwidth)가 한 번 사용한 후 Flag가 풀려버려 다시 입력받을 때 다시 설정해줘야 한다는 단점이 있습니다.

std::cin 객체는 EOF를 만나면 false를 반환(정확힌 void *이긴 한데, 그걸 명시적 형변환시켜 bool로 만드는 걸로 알고 있습니다.)합니다.

그러므로 string s;를 그대로 두고 while (cin.width(10), cin >> s)로 바꾸신 후, std::cout을 사용해 출력하시거나 printf로 출력하시고 싶으시면 인자로 s.c_str() 넣어주시면 됩니다.

댓글을 작성하려면 로그인해야 합니다.