讀入一個字符串 如果字符串是數字開頭的 為什麼就讀不進去了?
代碼如下 為什麼結果是這樣的?為什麼明明輸入的是“75BCD15”而讀入的確是”BCD15“?怎麼能讓數字也讀進去呢?嘗試了scanf和gets兩種方法 都不對。。
#include <iostream>
#include <stdlib.h>
#include<cstring>
#include <stdio.h>
using namespace std;
long long int val(char * hex)
{
long long int n = 0;
while (*hex != '\0')
{
n *= 16;
if (*hex >= 'A' && *hex <= 'F')
{
n += *hex - 'A' + 10;
}
if (*hex >= 'a' && *hex <= 'f')
{
n += *hex - 'a' + 10;
}
if (*hex >= '0' && *hex <= '9')
{
n += *hex - '0';
}
hex++;
}
return n;
}
int main()
{
int n,i;
cin>>n;
string a[n];
char input[1000] ;
gets(input);
// scanf("%s",&input);
printf("%s\n",input);
long long int v = val(input);
printf("%lld",v);
// cout<<v<<endl;
return 0;
}
你的cin>>n;是干嘛用的呢?
直接干掉不就好了? 看下下面的運行過程,你的75被cin>>n吃掉了
(gdb) n
33 cin>>n;
(gdb)
75BCD15
34 string a[n];
(gdb) p n
$1 = 75
(gdb) n
36 gets(input);
(gdb) n
38 printf("%s\n",input);
(gdb) n
BCD15
39 long long int v = val(input);
(gdb) p input
$2 = "BCD15\000\000\000@\336\377\377\377\177\000\000\320\224\377\367\377\177\000\000#E\336\367\377\177\000\000\000\000\000\000\000\000\000\000\020.\376\367\377\177\000\000\001", '\000' , "\001\000\000\000\377\177\000\000t:\336\367\377\177\000\000\006\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\006\000\000\000\000\000\000\000\230*\376\367\377\177\000\000\332\026\207\060\000\000\000\000\236B\336\367\377\177\000\000\006\000\000\000\000\000\000\000\032\000\000\000\377\177\000\000\020\337\377\377\377\177\000\000\377\377\377\377\000\000\000\000\300\346\255\367\377\177\000\000\250\372\255\367\377\177\000\000\340\336\377\377\377\177\000\000\377\377\377\377\000\000\000\000\260\342\256\367\377\177\000\000t:\336\367\377\177\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\006\000\000\000\000\000\000\000\230*\376\367\377\177\000\000\355\351C+\000\000\000\000\236B\336\367\377\177\000\000\000\000\000\000\001\000\000\000-\000\000\000\001\000\000\000\220\337\377\377\377\177\000\000\377\377\377\377\000\000\000\000\340\206P\367"...