scanf 无法正确识别数字

问题描述 投票:0回答:1

我正在尝试编写一个程序,该程序可以由输入的数字组成一个三角形。例如,如果我输入一个字符串

123
,输出应该如下。

1
12
123

我尝试用以下代码来实现它:

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

int main()
{
    char s[501];
    scanf("%[^\n]", s);
    for (int i=0;s[i]!='\0';i++) {
        for (int j=1;j<=s[i];j++) {
            printf("%d", j);
        }
        printf("\n");
    }
    return 0;
}

但是,输出如下(输入为

123
):

12345...4849
12345...484950
12345...48495051

有什么想法吗?谢谢

c
1个回答
0
投票

这个问题不像 scanf() 那样。在这个循环中:

for (int i=0;s[i]!='\0';i++) {

s[i]
被转换为 ASCII 字符的十进制值(有 其他系统是否也像 EBCDIC 但很可能您没有使用 它)。您可以在
man ascii
中看到它 - 1 是 49,2 是 50,3 是 51。您 需要将此数字转换为与字符串相同的数字 角色价值:

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

int main()
{
    char s[501];
    scanf("%[^\n]", s);
    for (int i=0;s[i]!='\0';i++) {
        for (int j=1;j<=s[i]-'0';j++) {
            printf("%d", j);
        }
        printf("\n");
    }
    return 0;
}

输出:

$ ./main
123
1
12
123

此外,您不需要包含

<string.h>
<stdlib.h>
以及 main() 的正确原型应该是
int main(void)
.

© www.soinside.com 2019 - 2024. All rights reserved.