c - 对不同类型的 `fscanf()` 使用 switch case

标签 c file text switch-statement scanf

问题:

我编写了一个 C 程序,该程序应该循环遍历输入文件并在布局相同的表格中显示其表格内容,但与输入文件不同的是,输出的值应该位于漂亮的均匀选项卡式列中。

我正在阅读的文本文件包含以下内容:

name surname 123 4.2 f
sara dddd 222 3.2 f
dan ssss 1233 1.3 m
ann aaaa 443 2.2 f

但是输出是错误的:

output

请注意不需要的换行,其中应显示在最后一列中的值变成了下一行的第一列。

程序:

    int i, j;
    char c;
    double d;
    char str[10];
    char t[6]="ssidc"; //Encoded column types descriptor (e.g. string, string, int, double, char"

    while(!feof(fa)) {

    for(i = 0; i < 5; i++) {
        switch(t[i]) {
            case('s'): 
                fscanf(fa,"%s",str);
                printf("%s\t",str);
                break;
            case('c'):
                fscanf(fa,"%c",&c);
                printf("%c\t",c);
                break;
            case('d'):
                fscanf(fa,"%lf",&d);
                printf("%.1lf\t",d);
                break;
            case('i'):
                fscanf(fa,"%d",&j);
                printf("%d\t",j);
                break;
            default:
                break;
        }
    }
    printf("\n");//new line
}

最佳答案

scanf("%c" 读取任何字符,但在调用它时当前位置位于空格上(您刚刚解析了一个 float ),然后将其读取为char。您需要通过提供扩展格式处理指令来跳过它:

fscanf(fa,"%*[ ]%c",&c);

阅读 scanf 手册以了解其工作原理。

关于c - 对不同类型的 `fscanf()` 使用 switch case,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41415371/

相关文章:

java - Swing:旋转风格化文本?

C动态增长数组

c - 基本 C 位运算示例

c++ - 删除文件的参数无效

arrays - Swift,字符串检查

javascript - Jquery 在没有类时隐藏类

c - memset 重新分配内存为 0 是常见做法吗?

谁能告诉我c中的列表文件和映射文件是什么?

java - 使用 Java 在文件夹中查找文件

c - 从文本文件读取数据到链表,错误处理