fanage 2016-02-01 03:49 采纳率: 0%
浏览 1562
已采纳

数字为什么没有读进去?C++

读入一个字符串 如果字符串是数字开头的 为什么就读不进去了?
代码如下 为什么结果是这样的?为什么明明输入的是“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;
}  


  • 写回答

6条回答

  • 不够努力的撸舍 2016-02-01 04:03
    关注

    你的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"...

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题