/* strcnvt.c -- 使用strtol() */
#include<stdio.h>
#include<stdlib.h>
#include"s_gets.h"
#define LIM 30
int main()
{
char number[LIM];
char* end;
long value;
puts("Enter a number (empty line to quit):");
while (s_gets(number, LIM) && number[0] != '\0')
{
value = strtol(number, &end, 10); /* 十进制 */
printf("base 10 input, base 10 output: %ld stopped at %s (%d)\n", value, end, *end);
value = strtol(number, &end, 16); /* 十六进制 */
printf("base 16 input, base 16 output: %ld stooped at %s (%d)\n", value, end, *end);
puts("Next number:");
}
puts("Bye!\n");
return 0;
}
#include<stdio.h>
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')
continue;
}
return ret_val;
}
/* 输出结果 */
Enter a number (empty line to quit):
10atom
base 10 input, base 10 output: 10 stopped at atom (97)
base 16 input, base 16 output: 266 stooped at tom (116)
Next number:
Bye!
想问一下,为什么会打印出10 atom 97。266, tom 166
尤其是end用%d输出,我觉得是a和t,但是不懂为什么要将后面的字符也打印出来