2014-10-16 64 views
-3

下面的代码只是要求你的年龄,并输出一个简单的printf。我试图做的是输入000,并让它返回000而不仅仅是0.我该怎么做?当使用strtol并输入2个零(00)时,它只返回一个零点?

#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

谷歌'printf格式说明符' – 2014-10-16 13:06:31

+0

但我希望它被保存在一个变量为000.不只是打印或硬编码。 – 2014-10-16 13:09:57

+2

@lemonsforyou,那么你需要将它存储为一个字符串。否则,这是不可能的。零是唯一的一个零,而不是三个或四个。 – HighPredator 2014-10-16 13:12:45

回答

1

如果我理解正确你的问题,你需要做的是这样的:

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

我不想只打印它000.我想它被保存为000不是0. – 2014-10-16 13:31:09

+0

@lemonsforyou你需要阅读整型输入一点。没有这样的数字为000 – qrdl 2014-10-16 13:36:39

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); 
} 

但如果你想存储它作为一个整数,结果将为0.顺便说一句,这是预期的行为:000000 = 000 = 0000.0000 = 0