第一次提问
想知道代码为什么输入:-123 结果为-49
使用的是dev c++
程序当中有两个问题:
1.在fun当中,第二个if应该是while,否则的话,只会取第一字符的值进行处理
2.在 t = t * 10 + (*p) 的时候,这个地方取到字符的ASCII码,而不是字符本身所表示的数字。字符1的ASCII码正是49.
所以你的程序输入-123,其实只是取到了第一个非“-”的字符“1”的ASCII码。
正确程序如下:
#include <stdio.h>
#include<string.h>
long func(char *p) {
int n = 1;
int t = 0;
if ((*p) == '-') {
n = -1;
p++;
}
while((*p) != '\0') { // 循环逐个读取字符
t = t * 10 + (*p - 48); // 获取其真实值。
p++;
}
return t * n;
}
int main () {
char s[6];
long n;
scanf("%s", s);
n = func(s);
printf("%ld", n);
return 0;
}
t+10+(*p)
不对
应该是
t+10+(*p)-'0'
x=x*10+ (*p - '0');
不知道你这个问题是否已经解决, 如果还没有解决的话:若序列中存在x,输出x第一次出现的下标;否则输出-1。
#include <stdio.h>
#include <stdlib.h>
int main() {
char input[10];
int num;
printf("请输入一个数字:");
scanf("%s", input);
num = strtol(input, NULL, 10); // 将字符串转换为整型
printf("输出结果为:%d", num);
return 0;
}