2016-11-20 5 views
3

나는 내 문제가 무엇인지에 관해 매우 짧게하려고 노력할 것입니다. 비록 초보 프로그래머이기 때문에 어리석은 질문에 정말 미안합니다.C - 문자열에 scanf를 사용하여 숫자를 얻으려면

문자열이 있습니다. scanf를 사용하여이 문자열에 값을 지정하려고합니다. 이 값은 단일 숫자 일 수도 있습니다 (단, 해당 숫자를 문자로도 사용하고 싶습니다).

char string[20]; 
scanf("%s", string); 

//LETS ASSUME WE ONLY WRITE THE NUMBER 1 IN THE STRING 

if(string=='1') 
printf("You have entered a single number: 1"); 

// IF I WOULD RUN THIS PROGRAM THE PRINTF PART WOULD NOT HAPPEN. WHY? 

이 코드는 물론 단지 예입니다

그래서 나는이 코드를했다. 내 프로그램에서 나는 간단한 printf가 아닌 IF와는 다른 일을 할 것이다.

이 코드를 사용하여 문자열 1에 값을 입력 한 다음 Enter 키를 누르면 IF에서 쓴 내용이 어떤 이유로 든 발생하지 않습니다.

아무도 나에게 어떻게하면 작동하도록해야합니까에 대한 설명을 줄 수 있습니까? 그렇다면 어떻게 IF 부분을 작성해야합니까? 도 (문자열 비교를 수행하는 직접 지원하지 않습니다 C로

#include <string.h> 

... 

if (strcmp(string, "1") == 0) /* if it returns 0, the string contents are the same for both strings */ 

... 

+0

@ user3121023 이봐! 시도해 봤어. 지금은 문자열입니다.하지만 뭔가 이해가 안됩니다. 이렇게하려고했습니다 : 새 문자열을 만들었습니다. 그래서 나는 strcmp를 사용할 수있다. -> char helper [20]; helper [0] = '1'; 도우미 [1] = '\ 0'; 사용자가 문자열에 숫자 1을 값으로 제공한다고 가정하고 strcmp (string, helper); 그리고 결과적으로 1을줍니다. 하지만 그것은 둘이 같기 때문에 나에게 0을 주어야합니다. 문제가 무엇입니까? – Noxter

+0

@ user3121023 작동했습니다! 도와 주셔서 대단히 감사합니다! 좋은 하루 보내! – Noxter

+0

잠재적 인 버퍼 오버 플로우를 막기 위해'string'에 얼마나 많은 문자를 저장할 수 있는지'scanf()'에게도 알려줍니다 :'scanf ("% 19s", string);' – chqrlie

답변

1

사용 (작은 따옴표가 char 값이 아닌 문자열 리터럴 의미로 조심), 당신은 실제로 두 개의 포인터를 비교하는 동일한 값이 저장되어 있으면 문자열 리터럴 "1"과 동일한 포인터가 아니며 string 변수는 컴퓨터 메모리의 다른 위치에 있습니다.

관련 문제