C语言程序设计--文件操作

前言



这里尝试与Python对别的方法来学习C语言的文件操作,毕竟我是Pythoner。

文件打开与关闭



Python


#因为是和C语言比对,所以不使用with
filename = "/etc/passwd"
fr = open(filename, 'r') #打开文件
"""
常见的打开模式有:
r只读
w写,如果原来文件有内容会清空
a追加写,不会清空文件原来的内容
+  读写
rb 二进制只读
wb 二进制写
ab 二进制追加写
...
fr.close()#文件关闭
"""

C语言


const char *filename = "/etc/passwd";
FILE *fr = fopen(filename, "r");//打开文件
/*
读写模式与python类似
*/
fclose(fr);//关闭文件

文件非读写操作



Python


fr.flush()  # 直接将缓冲区内容写入文件,不等待
fr.fileno() #返回文件描述符

C语言


fflush(fr);
//描述符是FILE的一个结构体中的一个int类型的变量

文件读操作



Python


#  读所有行返回一个list
lines = fr.readlines()
#  读取一行
line = fr.readline()
line = fr.next()#读取下一行
#  读取一定大小
buffer = fr.read([size])

C语言


/*读取一行*/
char buffer[1024];
printf("%s",fgets(buffer, 1024, fr));
/*读取一字符*/
printf("%c",fgetc( fr));
/*读取所有行*/
int line_count(FILE *fr){
    int line_number = 0;
    while(1){
        char flag;
        flag = fgetc(fr);
        if (flag == '\n'){
            line_number ++;
        }
        else if(flag == EOF){
            line_number ++;
            break;
        }
    }
    return line_number;
}
int line_number = line_count(fr);
/*注意如果需要计算完行数后,重新读取文本内容,需要关闭重新打开文件*/
char lines[number][1024];
char buffer[1024];
for (int i=0;i<number;i++){
    fgets(buffer, 1024, fr1);
    strcpy(lines[i], buffer);
}
for (int j=0; j<number; j++){
    printf("line-%d:%s\n", j, lines[j]);
}

转载于:https://www.cnblogs.com/KevinGeorge/p/10301205.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉,我是一个文本AI助手,无法提供PDF文件。不过,我可以为您提供一份基于C语言的21点扑克牌游戏代码供参考: ``` #include <stdio.h> #include <stdlib.h> #include <time.h> #define NUM_CARDS 52 #define FACE_CARD 10 #define ACE 11 int get_card_value(int card); void shuffle_deck(int deck[]); void deal_cards(int deck[], int *card1, int *card2); int player_turn(int deck[], int player_total); int dealer_turn(int deck[], int dealer_total); int main() { int deck[NUM_CARDS], player_total, dealer_total, card1, card2; srand((unsigned) time(NULL)); shuffle_deck(deck); deal_cards(deck, &card1, &card2); player_total = get_card_value(card1) + get_card_value(card2); printf("You have a %d and a %d.\n", card1, card2); printf("Your total is %d.\n\n", player_total); dealer_total = dealer_turn(deck, get_card_value(deck[2])); if (dealer_total > 21 || dealer_total < player_total) { printf("You win!\n"); } else { printf("Dealer wins!\n"); } return 0; } int get_card_value(int card) { int value; if (card > FACE_CARD) { value = FACE_CARD; } else if (card == 1) { value = ACE; } else { value = card; } return value; } void shuffle_deck(int deck[]) { int i, j, temp; for (i = 0; i < NUM_CARDS; i++) { deck[i] = i + 1; } for (i = 0; i < NUM_CARDS; i++) { j = rand() % NUM_CARDS; temp = deck[i]; deck[i] = deck[j]; deck[j] = temp; } } void deal_cards(int deck[], int *card1, int *card2) { *card1 = deck[0]; *card2 = deck[1]; } int player_turn(int deck[], int player_total) { int card, value; char hit; while (player_total < 21) { printf("Do you want another card? (y/n) "); scanf(" %c", &hit); if (hit == 'n') { break; } card = deck[NUM_CARDS - 1]; value = get_card_value(card); printf("You drew a %d.\n", card); player_total += value; if (player_total > 21) { printf("You busted!\n"); break; } printf("Your total is %d.\n\n", player_total); } return player_total; } int dealer_turn(int deck[], int dealer_total) { int card, value; printf("The dealer's hole card is a %d.\n", deck[1]); while (dealer_total < 17) { card = deck[NUM_CARDS - 1]; value = get_card_value(card); printf("The dealer drew a %d.\n", card); dealer_total += value; if (dealer_total > 21) { printf("Dealer busted!\n"); break; } printf("Dealer's total is %d.\n\n", dealer_total); } return dealer_total; } ``` 这个代码使用一个数组来表示一副扑克牌,通过随机洗牌函数来打乱这副牌的顺序。然后,根据游戏规则,玩家和庄家各发两张牌,然后根据牌的点数来进行游戏。当玩家的点数小于或等于21并且没有爆牌时,可以选择继续要牌或者不要牌。当玩家停止要牌后,庄家也进行类似的操作。最后,比较玩家和庄家的点数,判断胜负。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值