C 언어에서 int로 선언된 identifier에 string을 집어넣는 경우에 대한 질문입니다.

cho8992 Reply 6 years 51 weeks ago
예를 들어 int input; scanf("%d", &input); 와 같이 코드를 작성한 후 input에 문자열을 넣게 되면 무한루프가 발생하여 원인을 알아보았더니, 입력 버퍼에 아직 들어오지 못한 입력이 남아있어서 그런 것임을 알게 되어 while(getchar()!='\n'); 과 같은 방법으로 한 번 입력을 받고 난 뒤 입력 버퍼를 전부 비워 버리면 해결되는 것을 알 수 있었습니다. 그러나 여기서 한 발 더 나아가서 사용자가 정수가 아닌 문자열을 입력했을 때에는 에러 메시지를 출력하고 싶은데, 이와 같은 방법을 사용하면 identifier에 어쨌든 문자가 정수값으로 저장되는 것이니 정수를 넣었을 때와 구분이 되지 않는 것도 알 수 있었습니다. 이 때 입력되는 값이 정수인지, 아니면 문자열인지 판단하여 문자열일 경우 오류를 출력해 주고 싶다면, 어떤 식으로 접근해야 해결할 수 있을까요?
withcs1 Reply 6 years 51 weeks ago
scanf호출시 int형식을 주게되면 입력버퍼에서 숫자만을 읽고 문자는 읽지 않습니다. 아마 문자열을 입력하더라도 scanf는 문자를 정수값으로 저장하지 못하고 에러를 내거나 쓰레기값을 저장할거에요 키보드로 입력하는 문자는 모두 아스키코드 값을 갖고있는 문자로 입력되기때문에 숫자인지를 알기위해선 해당 아스키코드 값을 확인하는 방식이어야 합니다 fgets를 사용하면 쉽겠지만 꼭 scanf를 쓰셔야한다면 일단 %s로 문자열 형식으로 저장한 후에, 저장된 문자들을 확인하는 방법밖엔 없을거같네요