【问题标题】:I can print out the string values of what I read, but I am having trouble converting to use their ASCII equivalent我可以打印出我读到的字符串值,但我无法转换为使用它们的 ASCII 等价物
【发布时间】:2018-09-16 00:20:32
【问题描述】:

我正在尝试从文件中读取几行并存储我逐行读取的每个字符的 ASCII 值。我的输入如下所示:

这是我的代码最初的样子和它产生的结果:

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);
}

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

【问题讨论】:

  • 您需要使用%d 打印出一个字符的ASCII 值——例如:printf("%d",buf5[0]); + 学习如何访问字符串的每个字符。
  • *buf4, *buf5, *buf6, *buf7, *buf 将打印每个数组中的第一个字符。 (%d 转换对于打印 ASCII 值是正确的——要转换为十进制值,您需要从字符值中减去 '0')您需要查看 Why is while ( !feof (file) ) always wrong?
  • 您应该在此处复制并粘贴输入和输出。将它们放在图像中会阻止人们尝试代码

标签: c file ascii


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    或者

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

    对于这种特殊情况,它还需要声明五个字符数组,如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 是错误的

    【讨论】:

    • 我已经编辑了我的答案。否决投票者请查看是否有任何其他问题或撤回 Dv。
    猜你喜欢
    • 1970-01-01
    • 2020-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-22
    • 1970-01-01
    • 2011-03-23
    • 1970-01-01
    相关资源
    最近更新 更多