2014-10-16 2 views
-3

아래의 코드는 단순히 나이를 물어보고 간단한 printf를 출력합니다. 무엇을하려고하는 것은 000을 입력하고 000을 반환하고 0을 반환하지 마십시오. 내가 뭘합니까? 내가 제대로 질문을 이해하면strtol을 사용하고 2 개의 0 (00)을 입력 할 때, 단지 1 개의 0만을 출력합니까?

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

#define LINE_LEN 80 
#define EXTRA_SPACES 2 

int main(void) 
{ 
char line[LINE_LEN + EXTRA_SPACES]; 
char * end; 
int input_num; 

/* get user input */ 
printf("Please enter your age: "); 
fgets(line, LINE_LEN+EXTRA_SPACES, stdin); 
/* check for buffer overflow */ 
if(line[strlen(line)-1]!='\n') 
{ 
    printf("Error: buffer overflow\n\n"); 
    return EXIT_FAILURE; 
} 
/* remove newline */ 
line[strlen(line)-1]=0; 

/* retrieve number */ 
input_num = strtol(line, &end, 0); 
if(*end) 
{ 
    printf("Error: data entered was not numeric.\n\n"); 
    return EXIT_FAILURE; 
} 
printf("you are %d years old.\n\n", input_num); 
return EXIT_SUCCESS; 

}

+1

Google 'printf 형식 지정자' –

+0

으로 저장하고 싶습니다. 000으로 변수. 인쇄 또는 하드 코드되지 않습니다. –

+2

@ lemonsforyou, 그럼 당신은 문자열로 저장해야합니다. 그렇지 않으면 불가능합니다. 0은 3 또는 4가 아닌 단 하나의 0입니다. – HighPredator

답변

1

, 당신은 이런 식으로 작업을 수행해야합니다

printf("you are %03d years old.\n\n", input_num); 
+0

그냥 000으로 인쇄하고 싶지 않다. 000이 아니라 000으로 저장되기를 바란다. –

+0

@lemonsforyou 정수 타입. 000과 같은 번호는 없습니다. – qrdl

0

당신이 그것을 000로 저장하려면, 당신과 같이 input_num 저장해야 문자열 대신 sprintf를를 사용하여 :

char *buffer; 

if (!(buffer = malloc(sizeof(char) * strlen("you are XXX years old.\n\n")))) 
    return (MALLOC_ERROR); 
if (input_num < 1000) // Avoiding format string attack 
{ 
    sprintf(buffer, "your are %03d years old.\n\n", input_num); 
    puts(buffer); 
} 

그러나 int로 저장하려는 경우 결과는 0이됩니다. 예상되는 동작입니다. 000000 = 000 = 0000.0000 = 0

관련 문제