求教,本地跑没问题,全部WA

P5705 【深基2.例7】数字反转

anchorage @ 2022-06-27 22:38:17

#include <stdio.h>
#include<string.h>

int main()
{
    char s[1000];
    gets(s);
    for (int i = strlen(s) - 1; i >= 0; i--)
    {
        printf("%c", s[i]);
    }
    return 0;
}

by ineverleft @ 2022-06-27 22:53:11

@anchorage 用c++98就行了


by ineverleft @ 2022-06-27 22:53:54

由于可以无限读取,所以在2011年12月,ANSI 采纳了 ISO/IEC 9899:2011 标准,标准中删除了 gets()函数,使用一个新的更安全的函数gets_s()替代(具体用法看下面示例)。


by Pretharp @ 2022-06-27 22:54:14

gets() 被禁用了,这里改成用其它方式输入


by rzh123 @ 2022-06-27 23:46:56

@ineverleft 照您说的应该是 CE,但他是 WA,他是 \r 问题


by rzh123 @ 2022-06-27 23:47:42

@anchorage

Linux 中换行符是'\n'而Windows中是'\r\n'(多一个字符),有些数据在 Windows 中生成,而在洛谷评测机 Linux 环境下评测。这种情况在字符串输入中非常常见。

——《洛谷全站帮助》

另外 gets 确实被删了,建议不要用。


by anchorage @ 2022-06-28 23:36:54

@rzh123 不太懂,能解释一下吗


by rzh123 @ 2022-06-28 23:42:11

@anchorage 相当于输入时数据里每一行末尾换行符前多了一个字符 \r,比如样例,您的程序评测时会读取到 123.4\r,所以 strlen(s)-1 改成 strlen(s)-2 就过了


by anchorage @ 2022-06-28 23:59:27

@rzh123 非常感谢


|