繁体   English   中英

为什么该程序无法在我的文件上打印?

[英]Why is this program not printing on my file?

该代码应该将用户输入的信息打印到文件上,但是它所做的只是创建一个空文件...

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct room
{
    int room;
    char type[9];
    int cap;
    int price;
}rm;
FILE *k;
int main(){
    struct room rm;
    k=fopen("rooms.txt","w");
    printf("Please enter room number:");
    scanf("%d", rm.room);
    printf("\nPlease enter a description:");
    scanf("%s", rm.type);
    printf("\nPlease enter the room capacity:");
    scanf("%d", rm.cap);
    printf("\nPlease enter the price:");
    scanf("%d", rm.price);
    fprintf(k,"%d\t %s\t %d\t %d\n", rm.room,rm.type,rm.cap,rm.price);
    fclose(k);
}

这里

struct room
{
    int room;
    char type[9];
    int cap;
    int price;
}rm;

rm.roomrm.caprm.price均为int类型,在扫描用户输入时,您需要o提供地址&在其中存储一个整数。 例如替换

scanf("%d", rm.room); /* to store something into rm.room need to provide address */

scanf("%d", &rm.room);

和这个

scanf("%d", rm.cap); /* address is not provided */
scanf("%d", rm.price); /* address is not provided */

scanf("%d", &rm.cap);
scanf("%d", &rm.price);

还要检查fopen()的返回类型。 例如

k=fopen("rooms.txt","w");
if(k == NULL) {
 /* @TODO error handling */
 fprintf(stderr, "failure message\n");
 return 0;
}

以下建议的代码:

  1. 干净地编译
  2. 将评论纳入问题
  3. 执行所需的功能
  4. 不包括头文件,不使用那些内容
  5. 正确检查错误
  6. 兑现印刷页的右边距
  7. 避免任何可能的缓冲区溢出和由此产生的未定义行为
  8. 记住对数组的引用会降级为数组第一个字节的地址
  9. 始终将地址作为参数传递给函数: scanf()
  10. 说明为什么包含每个头文件
  11. 将结构的定义与结构的实例分开
  12. 没有声明被同名结构的另一个实例“阴影”的结构实例
  13. 使用功能的有效签名之一: main()

现在,建议的代码为:

#include <stdio.h>   // fprintf(), fopen(), fclose(), perror(), scanf()
#include <stdlib.h>  // EXIT_FAILURE, exit()

struct room
{
    int room;
    char type[9];
    int cap;
    int price;
};


int main( void )
{
    struct room rm;

    FILE *k = fopen("rooms.txt","w");
    if( !k )
    {
        perror( "fopen rooms.txt for writing failed" );
        exit( EXIT_FAILURE );
    }

    printf("Please enter a room number:");
    if( scanf("%d", &rm.room) != 1 )
    {
        fprintf( stderr, 
                 "scanf for -room number- failed\n" );
        fclose( k );
        exit( EXIT_FAILURE );
    }

    printf("\nPlease enter a room description:");
    if( scanf("%8s", rm.type) != 1 )
    {
        fprintf( stderr, 
                 "scanf for -room description- failed\n" );
        fclose( k );
        exit( EXIT_FAILURE );
    }

    printf("\nPlease enter the room capacity:");
    if( scanf("%d", &rm.cap) != 1 )
    {
        fprintf( stderr, 
                 "scanf for -room capacity- failed\n" );
        fclose( k );
        exit( EXIT_FAILURE );
    }

    printf("\nPlease enter the room price:");
    if( scanf("%d", &rm.price) != 1 )
    {
        fprintf( stderr, 
                 "scanf for -room price- failed\n" );
        fclose( k );
        exit( EXIT_FAILURE );
    }

    // multi lined parameters to honor right page margin
    fprintf(k,"%d\t %s\t %d\t %d\n", 
        rm.room,
        rm.type,
        rm.cap,
        rm.price);
    fclose(k);
}

回答OP的问题: 为什么该程序无法在我的文件上打印?

由于发布的代码未输入任何内容,这是由于scanf()函数参数的语法不正确

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM