读入一个字符串 如果字符串是数字开头的 为什么就读不进去了?
代码如下 为什么结果是这样的?为什么明明输入的是“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"...
数组怎么能用变量呢?
数组只能是常量下标:
int n,i;
cin>>n;
string a[n]; //编译应该无法通过吧?
gets 方法,现在不推荐使用了。
DO NOT USE THIS FUNCTION!! There is no limit on how much it will read.
最好用getchar方法,例如:
int i(0);
const int MAX_LENGTH = 1000;
char input[MAX_LENGTH];
//从控制台流中读取字符,直到按回车键结束
while ((input[i] = getchar()) != '\n') {
if (i > MAX_LENGTH - 1) {
break;
}
++i;
};
input[i] = 0;
// scanf("%s",&input);
printf("The input string is:%s\n", input);
long long int v = val(input);
printf("%lld", v);
// cout<<v<<endl;
return 0;
刚才input 数组下标有越界的问题
int i(0);
const int MAX_LENGTH = 1000;
char input[MAX_LENGTH];
while ((input[i] = getchar()) != '\n') {
++i;
if (i >= MAX_LENGTH - 1) {
break;
}
};
input[i] = 0;
//从控制台流中读取字符,直到按回车键结束
// scanf("%s",&input);
printf("The input string is:%s\n", input);
long long int v = val(input);
printf("%lld", v);
// cout<<v<<endl;
return 0;
1、c、c++语言规定数组长度必须是常量,不能是变量。但是有的编译器是允许是变量。
2、cin读入一个整数后,把回车留在了缓冲区,gets就会读入一个空字符串。
解决方法1:在cin后用fflush清空缓冲区。
推荐方法2:不动态申请数组,直接定义一个大数组,如:string a[100];
cin>>n;
fflush(stdin);//增加
string a[n];
char input[1000] ;
gets(input);