나는 사용자 정의 헤더 파일이 프로젝트를 만드는 작업을하고, 실행하고있다 :문제 몇 가지 문제에
이 코드에 정확히 무슨 일이 있었는지 모르겠지만, 후 내가 fgets()
함수를 사용하기 시작했다면, 그것은 내 코드에서 일부 printf()
의 출력을 멈춘 것으로 보인다. 여기에 아마 여기에 몇 가지 #include
문을 누락 코드의 중요한 부분은 다음과 같습니다
main.cpp
#include "ichat.h"
int main() {
prompts(P_IDLE, response);
prompts(P_USERNAME, response);
}
ichat.cpp
#include "ichat.h"
int prompts(int p_tag, char *response) {
if (p_tag == P_IDLE) {
printf("\nWaiting for connections. Press [ENTER] to start a chat.");
char msg[50];
char *ptr;
while (true) {
fgets(msg, strlen(msg), stdin);
ptr = (char*)memchr(msg, '\n', strlen(msg));
if (ptr != NULL) {
break;
}
} else if (p_tag == P_USERNAME) {
printf("\nPlease enter a username you'd like to use: ");
....
} ...
ichat.h
의 일부, 당신이 궁금했다 까봐 ...
#define P_IDLE 0
#define P_USERNAME 1
gcc main.cpp ichat.cpp
.
fgets()
함수로 while 루프를 추가 할 때 printf()
함수 중 아무 것도 출력을 생성하지 않습니다. 인쇄 기능이 정상적으로 작동하고 있기 때문에 여기에 무슨 일이 일어나고 있는지 정확하게 알 수는 없으며 때로는 \n
을 제거하거나 다른 printf()
기능을 추가하기도합니다. 꽤 혼란 스럽네요 ...
사용자가 입력하는 좋은 방법이 있습니까? 나는 나의 코드의 어떤 부분에 대한 어떤 힌트, 비평, 아이디어에 대해서도 열려있다.
"fgets() 함수를 구현했습니다"라고 썼습니다. 마치'fgets()'의 자신 만의 버전을 작성하는 것처럼 들리지만 코드는 그냥 호출하는 것처럼 보입니다. 문제를 명확히하기 위해 질문을 업데이트하십시오. –
fgets에 전달할 때 strlen이 반환 할 것으로 예상되는 것은 무엇입니까? 왜 iostream 대신 printf와 fgets를 사용한다면이 C++에 태그를 붙이겠습니까? – kfsone
'strlen()'은 문자열'msg'의 길이를 그 함수에 전달한다고 나는 생각한다. 'printf'와'fgets'를 사용하고 있었기 때문에 제가이 주제에 대해 읽었던 책과 일치했습니다. iostreams로 전환 할 수 있습니다. 도움이 될 것이라고 생각하십니까? – SuperContraptionGuy