2

这是一个 C 程序,我试图打印一个 ASCII 字符列表。我可以让程序打印一系列数字,但我无法让它打印列表中每个数字的 ASCII 值。

#include <stdio.h>
#define N 127

int main(void) 
{   
    int n;  
    int c;

    for (n=32; n<=N; n++) {
        char c = atoi( n); 
        printf("%d", c);
    }
    return 0;
}
4

8 回答 8

4

atoi将 ASCII 转换为int. 你正在通过它nn不是 ASCII;它是int。因此,atoi(n)不起作用。

删除后,您要做的是打印n代表的 ASCII 字符。你这样做:

printf("%c", n);

您可能想用数字标记每个字符,如下所示:

for (n=32; n<=N; n++) {
    printf("%d: %c\n", n, n);
}

顺便。这要求您的 C 实现使用 ASCII 作为其执行字符集(及其“C 语言环境”)。许多人都这样做。但是,该程序不能移植到使用不同字符集的实现中。

于 2013-08-09T11:11:29.277 回答
1
for (n=32; n<=N; n++) {
    printf("%c", n);
}

您可以使用直接打印n到字符%c

请注意,您定义了两个变量c,内部的 ( char c) 将遮蔽外部的 ( int c),这是有效的 C,但通常是不好的做法。

于 2013-08-09T11:14:38.037 回答
1

看看printf格式

实际上,%d用于打印带符号的十进制整数。您要打印相应的字符,因此您要查找的格式是%c.

所以它给出了:

printf("%d", c);
于 2013-08-09T11:14:12.193 回答
1

Atoi 将 ascii 条目转换为 int 表示形式。该程序是:

#include <stdio.h>
#define N 127

int main()
{
  int n;

  for (n=32; n<=N; n++) 
    printf("%c",n) ;

  return 0;
}
于 2013-08-09T11:17:40.427 回答
1

使用 %c 作为 ASCII 值,如下所示:printf("%d, %c\n", n, n); 然后删除该atoi()行。

于 2013-08-09T11:11:07.653 回答
1

代替

printf("%d", c) 

printf("%c", c)

另外,你不需要atoi。

只需以下内容就足够了:

int main(void) 
{   
    int n;  

    for (n=32; n<=N; n++) {
        printf("%c", n);
    }
    return 0;
}
于 2013-08-09T11:11:18.827 回答
1

您应该使用 %c 而不是 %d 作为格式说明符。

#include <stdio.h>
#include <conio.h>
#define N 127
int main(void) 
{   
    int n;  
    for (n=32; n<=N; n++)
        printf("%c", n);
    getch();
    return 0;
}
于 2013-08-09T11:12:00.003 回答
0

最终解决方案


我试图使它尽可能紧凑(尽管没有混淆)。


#include <stdio.h>
int main() {
  // for loop                                      //  outputs                |data type|
  // for(int i='a';i<='z';putchar(i),i++);          // a,b,c...x,y,z          |  char   |
  // for(int i='a';i<='z';printf("%c\n",i),i++);    // a,b,c...x,y,z          |  char   |
  // for(int i='A';i<='Z';putchar(i),i++);          // A,B,C...X,Y,Z          |  char   |
  for(int i='a';i<='z';printf("%d\n",i),i++);     // 97,98,99..120,121,122    |  ascii  |
  //for(int i='a';i<='z';printf("%x\n",i),i++);       // 61,62,63 ,78,79,7a   |  hex    |

 //// for(int i='a';i<'z';printf("%d\n",i),F(i < 5),i++);
// for(int i='a';i<='z'; printf("%c\n",i),i++);
  return 0;
}
于 2021-02-13T13:17:43.777 回答