我可以打印出我读过的字符串值,但是我无法转换为使用它们的ASCII等价物

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

我试图从文件中读取几行并存储每个字符的ASCII值,因为我逐行。我的输入如下:

input

这是我的代码最初的样子和它产生的内容:

char buf3[256], buf5[256], buf6[256], buf7[256], buf4[256], buf9[256];
    fscanf(fp, "%[^\n]", buf3);
while (!feof(fp)) {
    fscanf(fp, "%s %s %s %s %s", buf4, buf5, buf6, buf7, buf9);
    printf("\n%c %c %c %c %c", *buf4, *buf5, *buf6, *buf7, *buf9);
}

result

我认为打印出%c会给我ASCII值。有没有办法转换这些值?

c file ascii
2个回答
0
投票

假设您的输入011R0存储在数组buf中,然后打印每个字符的ASCII值,您必须访问每个字符并打印它,就像打印整数一样:

  int i;
  while(buf[i])
   {
       printf("%d\n",buf[i]);
       ++i;
   }

通过使用索引[i],如果字符串可以访问每个字符。除此之外,请看一下:Why is “while ( !feof (file) )” always wrong?


-1
投票

我以为打印出%c会给我ASCII值吗?不,格式说明符%c打印等价的char值,因为buf4buf5..etc是char数组,所以当你打印*buf5它打印数组的第一个char时如果打印ascii值,你必须从48中减去它(如果*buf包含数字(0 - 9),则ASCII值为0)。例如

printf("%d\n",(*buf4)  - 48);  

要么

printf("%d\n",(*buf4)  - '0'); 

同样对于这个特殊情况,它的堆栈内存的wstage声明五个char数组,如buf3buf4..buf9。你只能使用一个char数组并进行操作。例如

int index = 0 ;
char buf[20]; /* lets say each word of file are length of 20 char, you can change it */
while (fscanf(fp,"%s",buf) != EOF) {
        while(buf[index] != '\0') {     
                if(buf[index] >= '0' && buf[index] <= '9') { /*or use isdigit() */
                        printf("%d",buf[index] - 48);
                }
                else { /* apart from 0,1,...9 */
                        printf("%d",buf[index]);
                }
                index++;
        }
        printf(" ");
        index = 0;
}

另请阅读为什么使用feof() here的错误

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