묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
입출력 관련 전체적인 질문 있습니다!
어떤 문제는 cin + cout을 사용하시고 2-A번 문제는 scanf와 printf를 사용하셨는데 언제 무엇을 사용하시는지 그 기준이 궁금합니다! 감사합니다!
-
해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
Scanner, FileReader, BufferedReader 등 각각의 차이점 및 섹션 14. 퀴즈 #13의 호출 순서와 관련된 질문입니다...ㅎ
안녕하세요, 나도코딩 선생님...ㅎ 동영상 강의들 중 섹션 14. 입출력과 파일을 보다가 궁금증이 생겨서 질문을 하게 되었습니다...ㅎ(1) 섹션 14. 입출력과 파일을 공부하면서, 파일을 읽는 여러 가지 방법들을 접하고 있습니다. 공부하면서 BufferedReader, FileReader, Scanner등 여러 가지 방법들이 있는데, 이들은 어느 때 쓰이는 것이 가장 좋은가요? 예를 들면, BufferedReader는 큰 용량의 파일을 읽는데 적합하다 던가, 아니면 Scanner는 키보드 입력을 받는 것 외에도 파일을 읽고자 할 때, FileReader와 같은 역할을 한다 이런거요!만약 어느 한 텍스트 파일을 읽고자 할 때, Scanner를 예로 들면, 이렇게 코드를 적어볼 수 있을까요? 모든 건 이미 import가 있다고 가정하고 작성해봤습니다...ㅎ:... // 이전 코드 생략 try { File file = new File("testing.txt"); Scanner scanner = new Scanner(file); while(scanner.hasNext()) { System.out.println(scanner.next()); // 여기서 만약에 여러 줄들로 이루어진 텍스트에서 한 글자씩 따오려면, // 이전에 문자열 관련 질문 처럼 scanner.next().charAt을 쓰나요? } scanner.close(); } catch (FileNotFoundException e1) { e1.printStackTrace(); // 예외 처리 1 } catch (IOException e2) { e2.printStackTrace(); // 예외 처리 2 }(2) 섹션 14에 있는 퀴즈 #13과 관련된 질문입니다! 제가 try문 안의 String input; scanner의 호출 스택(순서)을/를 제대로 이해했는지 알고 싶습니다...ㅎ... // 이전 코드 생략 Scanner scanner = new Scanner(System.in); try (BufferedReader br = new BufferedReader(new FileReader("saying.txt"))) { ... // 퀴즈 시작 및 제목 출력 String quiz; String answer; String input; while (true) { quiz = br.readLine(); answer = br.readLine(); if (quiz == null || answer == null) { break; } System.out.println(" (문제) " + quiz); System.out.println(" (답 입력) "); input = scanner.next(); ... // input.equal(answer), if-else문 생략 } ... } catch (IOException e) { e.printStackTrace(); // 예외 처리 }여기 이 코드에서, quiz랑 answer는 1줄 1줄 br.readLine();을 통해 단어 및 문장들을 인식하는 반면, 입력하는 답안의 경우에는 우선 try문 안에서 String input;을 선언하고, 대입 연산자 = 를 통해 .next();로 입력을 받은 다음, string으로 선언된 input을 .equal();로 입력받은 값과 정답을 비교하여 최종 결과를 출력하는 건가요?프로그래밍 언어를 공부하다보니 여러 질문들과 궁금증이 많이 쌓이는데, (특히 최근에 들어선 더 많아졌네요...ㅎ) 그 때마다 제 궁금증을 답글을 통해 잘 해소줘서 진심으로 감사합니다..ㅎ :)
-
미해결홍정모의 따라하며 배우는 C++
읽기 및 쓰기에 대해 파일 포인터가 하나만 있는 이유가 궁금합니다.
#include <iostream> #include <fstream> #include <string> #include <sstream> int main() { using namespace std; // 1. 파일 입출력의 파일 포인터 // 테스트용 텍스트 파일 생성 fstream fs{ "test.txt", std::ios::out }; fs.close(); fs.open("test.txt"); fs << "THIS IS FILE STREAM.\n"; // 읽기 및 쓰기에 대한 현재 파일 포인터의 위치를 콘솔창에 출력 cout << "읽기 위치: " << fs.tellg() << '\n'; // 예상: 0 (파일의 시작 위치) cout << "쓰기 위치: " << fs.tellp() << '\n'; // 예상: 22 (THIS IS FILE STREAM.\n를 쓴 후의 위치) cout << endl; // => 그러나 동일한 결과를 출력한다. // 2. 문자열 스트림 입출력의 스트림 포인터 stringstream ss; ss << "THIS IS STRING STREAM.\n"; string str; ss >> str; cout << "str: " << str << '\n'; // THIS cout << "읽기 위치: " << ss.tellg() << '\n'; // 예상: 4 (THIS를 읽은 후의 위치) cout << "쓰기 위치: " << ss.tellp() << '\n'; // 예상: 23 (THIS IS STRING STREAM.\n 이후의 위치) return 0; } 강의 시청 후에 learncpp.com에서 관련된 챕터를 복습하던 중에 파일 포인터는 읽기 및 쓰기에 대한 파일 포인터가 동일하다는 사실을 알게 되었습니다. 그래서 텍스트 파일을 생성해 임의의 문자열을 파일에 작성하고 tellg()와 tellq()로 확인해봤습니다. 결과는 동일한 위치를 반환했습니다. 읽기를 하지도 않았는데 말이죠. 그런데 일반적으로 생각해보면 입력과 출력에 대해 서로 개별적인 포인터를 가져야할 것 같은데 입출력의 기능을 모두 하는 스트림이 동일한 포인터를 가진다는 게 이해가 안돼서, 이번에는 다른 스트림인 문자열 스트림으로 테스트를 했습니다. 놀랍게도 문자열 스트림은 입출력에 대한 포인터를 독립적으로 보유하는지 tellg()와 tellq()는 서로 다른 위치를 반환했습니다. 구글링으로 답을 찾아보려 했지만 능력의 한계로 찾지 못 했습니다. 왜 입출력 파일 스트림만 동일한 포인터를 가지는 건가요? 단독 언어에 국한된 문제가 아니라 운영체제에 관련된 것일까요?
-
미해결문제로 배우는 C언어
scanf 입력한 수 중 일부 자리만 저장
1. 이해한 것 강의에서 설명한대로 scanf는 lf로 받고 printf 시에만 0.2f 를 하게되면, 진짜 둘째짜리까지만 받은게 아니라 원래 소수까지 받고 나서 곱한 뒤에 출력할 때 소숫점 셋째자리에서 반올림하는 코드라고 이해했습니다. 2. 궁금한 것 3.1295846 과 7.118592 를 입력해도 3.12와 7.11 만 입력받아서 출력예제와 동일한 값 22.18이 나오게 할 수는 없나요? 있다면 코드를 알고싶어요. 3. 제 생각 저는 scanf("%0.2lf %0.2lf", &a, &b) 를 시도해봤는데 0이 나왔습니다. 문자열 배열 두개를 선언해서 [인덱스] 번호를 활용해 0부터 쭉 받으며 데이터가 숫자인지 소수점인지 비교하다가 소수점 발견시 그 요소 이후 두 요소만 더 저장하는 방법을 생각해보았는데 배보다 배꼽이 큰 것 같습니다.