我正在尝试编写一个程序,该程序可以由输入的数字组成一个三角形。例如,如果我输入一个字符串
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
有什么想法吗?谢谢
这个问题不像 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)
.