提问字符串与指针,请老兄看看

第一次提问
想知道代码为什么输入:-123 结果为-49
使用的是dev c++

img

img

程序当中有两个问题:
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'

  • if 要改成 while

img

  • 另外 *p 是 字符,所以 要 减 '0',才能算出 数字
x=x*10+ (*p - '0');
不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这篇博客: 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1110:查找特定的值中的 【输出】 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    若序列中存在x,输出x第一次出现的下标;否则输出-1。

  • 以下回答来自chatgpt:
    1. 在C语言中,输入的数字应该存储在整型变量中,例如int类型。如果你使用了字符型变量如char类型来存储,输入的数字会被当做字符来处理,导致输出结果错误。
    2. 在进行输入操作时,需要考虑将输入的字符转换为数字型数据。可以使用标准函数如atoi()或strtol()完成转换。
    3. 以下是示例代码,使用了strtol()函数将输入的字符串转换为整型变量并输出。
    #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;
    }
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^