【发布时间】:2018-12-23 00:20:14
【问题描述】:
我想从输入文件中读取卡片并打印出它们的值。
但是,当我尝试打印字符时,它会打印出 '0'。
如果我打印出字符 'A',那么通常应该打印出 int 值 65,因为我将字符 'A' 存储为 Int。
谁能帮帮我?
提前谢谢你。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define max 100
#define MAX_LENGTH 14
int main(){
char *lines = malloc(max*sizeof(char));
char **colour = malloc(max*sizeof(char));
int *value =malloc(max*sizeof(int));
FILE *fp;
fp = fopen("config2.txt", "r");
if(fp == NULL){
printf("Cannot open filelist.txt\n");
return 1;
}
int i= 0;
while (i < max && fgets(lines, MAX_LENGTH, fp) != NULL) {
colour[i] = malloc(MAX_LENGTH);
sscanf(lines, "%s %d", colour[i], &value[i]);
printf("%s\n", colour[i]);
printf("%d\n", value[i]);
i++;
}
return 0;
}
输入:
RED A
RED 2
RED 3
RED 4
RED 5
RED 6
RED 7
RED 8
RED 9
RED 10
RED J
RED Q
RED K
【问题讨论】:
-
我首先检查
sscanf的返回值。如果您没有正确读取数据,则无法正确打印。 -
@Retired Ninja sscanf 的返回值可以是 null,0 或 1 我认为在我的情况下它是 0。我不明白我是如何没有正确读取数据的。
-
@momonosu 您要求它读取带有 %d 的 int,但提供的字母不是数字,即“A”。因此,它无法正确读取。
-
正如@Serge 所说,
%d无法读取字母,但您还有其他问题。char **colour = malloc(max*sizeof(char));必须是char **colour = malloc(max*sizeof(char*));,因为您将指针分配给字符,而不是字符。如果sscanf没有返回 2,那么您没有正确读取数据。 -
OT:关于:
printf("Cannot open filelist.txt\n"); return 1;1) 错误消息应该输出到stderr,而不是stdout。 2)当错误指示来自C库函数时,还应输出系统认为发生错误的文本原因。一个很好的方法是:perror( "foen failed" ); exit( EXIT_FAILURE );