사용자가 선택한 길이의 문자 배열로 문자열을 읽으려고합니다. 문제는 getchar()이 내 코드에 따라 Enter 키를 눌러 수동으로 개행을 입력 할 때까지 읽기를 중지하지 않는다는 것입니다. 나는 다른 사람들의 글을 읽었으며, 왜 내가 이런 식으로 할 수 없는지를 이해한다. 이것은 내 과제물에 완전히 모순된다. getchar의 입력 문자열
int chPrompt(int nchars);
void strInput(char str[], int nchars);
int main(void) {
int nchars = chPrompt(nchars);
char str[nchars];
strInput(str, nchars);
return 0;
}
int chPrompt(int nchars) {
printf("How many chars do you need to input? >");
return scanf("%i", &nchars);
}
void strInput(char str[], int nchars) {
int i = 0;
while((str[i] = getchar()) != '\n') {
if(i > nchars-1)
break;
i++;
}
str[i] = '\0';
//Troubleshooting
printf("%s %d", str, strlen(str));
}
이
은 유인물의 말씀입니다 :입력은 키보드에서 문자열 (공백 포함) 우리가 를 얘기 기술을 사용하여 (getchar가()와 함께 도착하지 않으면 서()는 fgets() 또는 scanf()), 이 추가되어 최대 값은 80 자까지 입력됩니다. 입력 후에 적절한 위치에 널 (null)이 있는지 확인하십시오.
우리가 클래스에서 이야기 한 기술은 getchar가 char 배열에 할당 된 while 루프입니다.
내 질문 : 교수님은 그의 지시에 대해 매우 신중합니다. 이 유인물에서 그는 구체적으로 80까지의 금액을 입력하라는 메시지를 전하고 있습니다. 이것은 getchar의 기능과 모순되는 것입니까? 이 '기법'을 사용하여 문자열의 길이를 제한하는 방법이 있습니까?
내가 발견 한 스레드 중 일부에서는 사람들이 OS에 의존한다고 언급했습니다. 그래서, 문제가 있다면, 나는 Windows 8.1에 있습니다.
'숯 STR [nchars]'→ '숯 STR [nchars + 1]'. null 문자를위한 공간을 놓쳤습니다. 당신이 원하는 것은 "버퍼 된 입력 모드"입니다. –
@GrzegorzSzpetkowski Taken care! 알림 주셔서 감사. 버퍼링 된 입력 모드를 해결할 수있는 방법이 있습니까? 아니면 유인물을 잘못 해석합니까? – LukeFi
"이것은 getchar의 기능과 모순되는 것입니까?" - 아니, 맞지 않아. getchar가 fgets와 섞여있는 것처럼 보입니다. –