我试图从文件中读取几行并存储每个字符的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值。有没有办法转换这些值?
假设您的输入011R0
存储在数组buf
中,然后打印每个字符的ASCII值,您必须访问每个字符并打印它,就像打印整数一样:
int i;
while(buf[i])
{
printf("%d\n",buf[i]);
++i;
}
通过使用索引[i]
,如果字符串可以访问每个字符。除此之外,请看一下:Why is “while ( !feof (file) )” always wrong?
我以为打印出%c会给我ASCII值吗?不,格式说明符%c
打印等价的char
值,因为buf4
,buf5
..etc是char数组,所以当你打印*buf5
它打印数组的第一个char时如果打印ascii
值,你必须从48
中减去它(如果*buf
包含数字(0 - 9),则ASCII值为0)。例如
printf("%d\n",(*buf4) - 48);
要么
printf("%d\n",(*buf4) - '0');
同样对于这个特殊情况,它的堆栈内存的wstage声明五个char数组,如buf3
,buf4
..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的错误