#include <stdio.h>
#include <string.h>
#define SIZE 10
char* s_gets(char* st, int n) {
char* ret_val;
int i = 0;
ret_val = fgets(st, n, stdin);
if (ret_val) {
while (st[i] != '\n' && st[i] != '\0')
i++;
if (st[i] == '\n')
st[i] = '\0';
else
while (getchar() != '\n');
}
return ret_val;
}
int main() {
char input[SIZE];
puts("INPUT ANYTHIN");
while (s_gets(input, SIZE))
puts(input);
puts("THIS IS THE END OF THE PROGRAM");
}
s_gets 함수는 예제들에 있던 함수인 것 같습니다. 입력에 아무 것도 넣지 않은 채로 엔터 키 하나만 누르면 input의 배열에 '\0'만 들어가므로 while(s_gets(input, SIZE))에서 false로 처리되어 break되어야 하는 것이 아닌가요? 프로그램 실행하면 while문이 계속 돌아가던데 왜 그런 것인가요?
C언어는 다른 언어들과는 달리 boolean이라는 자료형이 따로 없습니다.
대신 0을 거짓, 0이 아닌 건 참으로 판단합니다.
while(1)이 무한루프인 것도 그것 때문이에요
문자열과 문자의 차이에 대해 주의해주시면 좋을 것 같아요
아래 코드를 실행해서 여러 케이스를 넣어보면 이해하시는 데 도움이 될 것 같습니다
(터미널에서 EOF 입력은 ctrl+D입니다.)
#include <stdio.h>
#include <string.h>
#define SIZE 10
char* s_gets(char* st, int n) {
char* ret_val;
int i = 0;
ret_val = fgets(st, n, stdin);
if (ret_val) {
while (st[i] != '\n' && st[i] != '\0')
i++;
if (st[i] == '\n')
st[i] = '\0';
else
while (getchar() != '\n');
}else
printf("if(\"%s\")가 실행되지 않았습니다.\n",ret_val);
return ret_val;
}
int main() {
if("\n")puts("if(\"\\n\")은 실행됩니다.");
if("\0")puts("if(\"\\0\")은 실행됩니다.");
if("")puts("if(\"\")은 실행됩니다.");
if('\n')puts("if(\'\\n\')은 실행됩니다.");
if('\0');else puts("if(\'\\0\')은 실행되지 않습니다.");
if(EOF)puts("if(EOF)은 실행됩니다.");
printf("\\n은 아스키코드 %d\n",'\n');
printf("\\0은 아스키코드 %d\n",'\0');
printf("EOF는 아스키코드 %d\n",EOF);
char input[SIZE];
puts("INPUT ANYTHIN");
while (s_gets(input, SIZE))
printf("input==\"%s\"이므로 while이 계속 실행됩니다.\n",input);
puts("THIS IS THE END OF THE PROGRAM");
}