精华内容
下载资源
问答
  • C语言文件输入输出读取中文TXT文件出现乱码

    万次阅读 多人点赞 2018-03-17 19:18:37
    今天在实现一个倒序输出文件的程序时测试了英文数字和中文,唯独中文出现了乱码,源码如下//倒序显示文件的内容 #include<stdio.h> #include<stdlib.h> #define CNTL_Z '\032' //文件...

    今天在实现一个倒序输出文件的程序时测试了英文数字和中文,唯独中文出现了乱码,源码如下

    //倒序显示文件的内容
    #include<stdio.h>
    #include<stdlib.h>
    #define CNTL_Z '\032'   //文件结尾标记
    #define SLEN 81
    int main()
    {
    char file[SLEN];
    char ch;
    FILE *fp;
    long count,last;
    
    puts("Enter the name of the file to be processed:");
    scanf("%80s",file);
    if((fp=fopen(file,"rb"))==NULL)
    {
    printf("reverse can't open %s\n",file);
    exit(EXIT_FALLURE);
    }
    fseek(fp,0L,SEEK_END);  //定位到文件末尾
    last=ftell(fp);
    for(count=1L;count<=last;count++)
    {
    fseek(fp,-count,SEEK_END);
    ch=getc(fp);
    if(ch!=CNTL_Z && ch!='\r')
    putchar(ch);
    }
    putchar('\n');
    fclose(fp);
    return 0;
    }

    如果明白原理其实很简单,汉字ANSI编码一个汉字对应两个字节,但是传统char类型只有一个字节,即putchar()只能输出汉字的一半,也就变成乱码了。
    下面的代码很好理解了
    int main()
    {
    	FILE *p;
    	char file[50];
    	scanf("%80s", file);
    	p = fopen(file, "r");
    	int i = 0;
    	char a[1000];
    	while ((a[i] = fgetc(p)) != EOF)
    		i++;
    	a[i] = '\0';
    	puts(a);
    	printf("\n\n");
    	for (int j = 0; j <= i - 1; j++)
    		printf("%c   ", a[j]);
    	system("pause");
    	return 0;
    }

    第一次输出是正常的,而第二次输出就是乱码
    至于怎么解决,把汉字看做字符串就可以了,或者两个字节一输出

    如果你们有更好的想法,请留言告诉我
    展开全文
  • 0\数据类型基本类型:整型:int短整型long 长整型实型(浮点型): 单精度FLOAT双精度DOUBLE指针构造: 数组、结构、联合、枚举空类型 void1\输入输出输入输出在C语言文件头#include 或者 #include"stdio.h"C语言提供的...

    0\数据类型

    基本类型:整型:int短整型 long 长整型

    实型(浮点型): 单精度FLOAT 双精度DOUBLE

    指针

    构造 : 数组、结构、联合、枚举

    空类型 void

    1\输入输出

    输入输出在C语言文件头 #include

    或者 #include

    "stdio.h"

    C语言提供的函数有下面:

    字符输入 getchar()

    字符输出 putchar(c)

    格式化输入

    scanf('',&a);

    格式化输出

    printf('',a,123);

    *****格式转化字符*********

    d

    十进制数据

    o 八进制数据

    是字母o不是数字0(x=025注意,是数字 0 ,而不是字母 O

    )

    x 十六进制数据

    小写 x 表示输出使用小写字母,大写 X

    表示输出使用大写字母。

    (使用

    %#o,%#x 或者 %#X,得到的输出将包括前缀 0,0x 或者 0X。)

    c 单个字符

    s 字符串

    f 实数(单进度f

    或双精度lf)

    u

    无符号十进制数

    e

    以标准指数形式输出单精度或双精度数

    g 选用%f或%e格式中输出宽度较短的一种格式,不输出无意义的0

    ******附加格式说明符*****************

    l---用于LONG长整型数据或DOUBLE数据

    h---用于短整型数据

    正整数---指定输入或输出数据的宽度

    *----表示本输入项在读入后不赋给相应的变量

    - 表示输出数据向左对齐排放

    2\字符和组合规则

    1、区分大小写

    2、只能由字母、数字、下划线组合并且第一个字符必须非数字

    合法命名

    非法命名wiggles $Z]**cat2 2cat

    Hot_Tub Hot-Tub

    taxRate tax

    rate

    _kcab don't

    我们也不能用关键字和保留标识符来给我们自定义的变量命名。

    长度限制

    C89 规定,编译器至少应该能够处理 31 个字符(包括

    31)以内的内部标识符(internal

    identifier);而对于外部标识符(external

    identifier),编译器至少应该能够处理 6 个字符(包括

    6)以内的外部标识符。所谓标识符,是指我们为变量(variable)、宏(macro),或者函数(function)等等取的名字。例如

    int num; 这个语句中的 num 就是一个标识符。

    最新的

    C99 标准规定,编译器至少应该能够处理 63 个字符(包括

    63)以内的内部标识符;编译器至少应该能够处理 31 个字符(包括

    31)以内的外部标识符。

    事实上,我们可以使用超出最大数目限制的字符来命名标识符,不过编译器会忽略超出的那部分字符。也就是说,如果我们用

    35 个字符来命名变量,而那个编译器最多只能处理 31 个字符的变量名的话,那么多出的那 4 个字符就会被编译器忽略,只有前面的 31

    个字符有效。有些古老的编译器只能处理 8 个字符以内的标识符,对于这样的编译器来说,标识符 kamehameha 和

    kamehameko 是等价的,因为它们前面 8 个字符相等。

    3\警告(warning)错误(error)

    warning编译器报警则说明我们写的代码符合 C

    语言语法,但是那些代码所起的效果可能和我们所期待的不同。

    错误(error),并且也不把程序编译成可执行文件。编译器报错则说明我们的程序存在错误!漏写分号(;)或者没写收大括号

    } 等等都会导致编译器报错。

    4\恒量(常量)和变量double

    pi = 3.14; //pi 是变量

    pi = 3.1415; //双精度double类型

    scanf(

    "%lf", &pi );

    %lf 是中的 l 是小写的英文字母

    L,这里一定要用小写。

    %lf 的作用是告诉 scanf 函数,&pi

    是一个双精度浮点型指针(double *)。

    %Lf 的意思是,&pi

    是加长型双精度浮点型指针(long double *)。因为 pi 是双精度浮点型变量,所以

    &pi

    是双精度浮点型指针,故而我们应该用%lf。

    5\如何编写函数

    #include

    void

    butler(void);

    int main(void)

    {  printf("I will summon the butler function.\n");

    butler(); printf("Yes. Bring me some tea and writeable CD-ROMS.\n");

    return 0;

    }

    void butler(void) {

    printf("You rang, sir?\n");

    }

    上面的代码中,butler

    出现了 3

    次。第一次是作为函数原型;第二次是函数调用语句;第三次是函数定义。

    6\关键字和保留标识符

    C 语言的所有关键字,其中红色的是 ISO C99 标准新增的关键字。

    auto enum restrict unsigned break extern return void case float short volatile

    char for signed while const goto sizeof _Bool continue if static _Complex default inline struct _Imaginary do int switch

    展开全文
  • C语言判断输入是否是数字

    万次阅读 2013-03-20 21:13:38
    使用scanf的返回值可以很容易判断输入是否为数字。 根据scanf返回值的描述: scanf()函数返回成功赋值的数据项数,读到文件末尾出错时则返回EOF。 如: scanf("%d,%d", &a, &b); 如果a和b都被成功读入,那么...

    使用scanf的返回值可以很容易判断输入是否为数字。

    根据scanf返回值的描述:

    scanf()函数返回成功赋值的数据项数,读到文件末尾出错时则返回EOF。
    如:
    scanf("%d,%d", &a, &b);
    如果a和b都被成功读入,那么scanf的返回值就是2
    如果只有a被成功读入,返回值为1
    如果a和b都未被成功读入,返回值为0
    如果遇到错误或遇到end of file,返回值为EOF。
    所以,以下代码可以判断输入是否为十进制数字。如果输入字符或其他符号,ret值为0,如果输入为十进制数,ret为1:
    int digit;
    printf("please input a integer\n");
    int ret = scanf("%d",&digit);
    if(0 == ret)
    {
        printf("you should input a integer\n");
        system("pause");
        return 0;
    }
    与此例类似,利用scanf()的返回值也可以判断其他类型的输入。
    展开全文
  • 所以我正在研究一个程序,该程序从包含每个行/项目的“项目编号”,“单价”和“购买日期”的文件中读取行。 我已经达到了可以扫描文件并以所需的图表格式组织它的程度,但我无法弄清楚如何按“项目编号”对数据进行...

    所以我正在研究一个程序,该程序从包含每个行/项目的“项目编号”,“单价”和“购买日期”的文件中读取行。 我已经达到了可以扫描文件并以所需的图表格式组织它的程度,但我无法弄清楚如何按“项目编号”对数据进行排序。

    这是我的代码:

    #include #include int main() { FILE *fp; char ch; fp = fopen("f.txt", "r"); //open the file named f.txt if (fp == NULL) //In case we can't find the file, notify the user printf("File not foundn"); printf("Item ttUnit PricetPurchase Daten"); //set up the header while ((ch = fgetc(fp)) != EOF) { //set the character equal to the character next in the file using fgetc, and //if its not equal to the end of file if (ch == ',') { printf("tt"); //add two tabs every time a ',' is encountered. } else { printf("%c",ch); //just display the output from the file } } fclose(fp); //closes the file return 0; }

    样本输入

    270f017a5d180a88ecbffa65b762ad09.png

    样本输出

    270f017a5d180a88ecbffa65b762ad09.png

    请参阅,我需要按项目编号(最左边的列)对输出进行排序。 我的想法是将每一行添加到字符串数组(c中的char数组),然后从那里我不知道如何识别项目编号,以便为输出排序。 我对fscanf稍微熟悉,但不知道如何在这里应用它。 非常感谢任何帮助,谢谢。

    好吧,我相信把它分解成一些步骤会更好。

    我强烈建议您阅读有关strtok()和qsort()函数的更多信息,如果您不熟悉它们的话。

    这是代码:

    #include #include #include // STEP 1 typedef struct { int item; float price; char date[50]; } Data; int compare (const void * a, const void * b) { Data *dataA = (Data *)a; Data *dataB = (Data *)b; return ( dataA->item - dataB->item ); // Ascending order //return ( dataB->item - dataA->item ); // Descending order } int main() { FILE * fp; char line[150]; Data data[3]; int i = 0; fp = fopen("f.txt", "r"); while (1) { // STEP 2 if (fgets(line,150, fp) == NULL) break; // STEP 3-4 char * pch; pch = strtok (line,","); data[i].item = atoi(pch); // item part pch = strtok (NULL, ","); data[i].price = atof(pch); // unit price part pch = strtok (NULL, ","); strcpy(data[i].date, pch); // purchase date part i++; } printf("##### BEFORE #####n"); printf("Item ttUnit PricetPurchase Daten"); //set up the header for (int k = 0; k < 3; k++) { printf("%dtt%ft%s", data[k].item, data[k].price, data[k].date); } // STEP 5 qsort (data, 3, sizeof(Data), compare); printf("n##### AFTER #####n"); printf("Item ttUnit PricetPurchase Daten"); //set up the header for (int k = 0; k < 3; k++) { printf("%dtt%ft%s", data[k].item, data[k].price, data[k].date); } fclose(fp); return 0; }

    请注意,此代码仅针对您的测试用例编写。 如果您的数据结构不同(如果您有三列以上等),则需要修改代码。 此外,您还需要做一些error handling。

    这是输出:

    ##### BEFORE ##### Item Unit Price Purchase Date 583 13.500000 10/24/2005 3912 599.989990 7/27/2008 12 19.990000 3/16/2001 ##### AFTER ##### Item Unit Price Purchase Date 12 19.990000 3/16/2001 583 13.500000 10/24/2005 3912 599.989990 7/27/2008

    希望这可以帮助。

    巴里斯

    以上就是c/c++开发分享对包含从

    本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

    如若转载,请注明出处:https://www.ssfiction.com/c-cyuyankaifa/549424.html

    展开全文
  • 输入可以是以文件的形式或从命令行中进行。C 语言提供了一系列内置的函数来读取给定的输入,并根据需要填充到程序中。当我们提到输出时,这意味着要在屏幕上、打印机上或任意文件中显示一些数据。C 语言提供了一系列...
  • 1.Linux文件编程之open 2.Linux文件编程之write 3.Linux文件编程之read 4.Linux文件编程之lseek 5.Linux文件编程之cp源码编程 6.Linux文件编程之标准输入、输出、错误 ...13.C语言文件编程之fputc,fgetc,
  • c语言文件chess.c

    2020-04-14 11:18:58
    输入的棋盘大小是19×19,用数字0表示空位置(即没有棋子),用数字1表示该位置下了一白色棋子,用数字2表示该位置下了一黑色棋子。假设同一颜色的棋子在同一条横行、纵列或斜线上连成的棋子个数不会超过4个,并且...
  • c语言文件操作

    2012-11-05 12:19:59
    文本文件:: 数据以其数字字符的ASCII码形式、一个字节一个字节地存储在磁盘上。 二进制文件:数据以二进制形式在存储在磁盘上。 设备文件输入/输出设备 标准输入文件:键盘 标准输出文件/标准
  • C语言文件进阶操作

    2018-06-10 21:11:00
    Description文件a.dic、b.dic、c.dic中分别存有张三的三科成绩,每个文件都是16字节:前8个字节存储其...键盘输入一个数字(1,2,3),根据输入数字从相应的文件中读出张三的数据并显示。 数字文件的对应关系...
  • C语言文件操作

    2008-10-23 10:31:00
    1. 首先要理解几个概念:文件: 按一定规则存储在磁盘上的数据集合。文件名: 能唯一标识某个磁盘文件的字符串。...设备文件输入/输出设备标准输入文件:键盘标准输出文件/标准错误输出文件:显示器文件
  • 本文主要实现功能:用c语言编写程序,实现从命令行传参输入要读入的文件,并动态分配用于保存文件数据内容的数组内存,统计文件中字符的个数,并将文件内容打印输出。 注 (1)本文中统计字符个数的程序只针对字符...
  • C语言 · 数字三角形

    2017-01-09 18:51:00
    算法训练 数字三角形 时间限制:1.0s 内存限制:256.0MB   问题描述  (图3.1-1)示出了一个数字三角形。 请编一个程序计算从顶至底的某处的一条路 径,使该路径所经过的数字的... 文件中首先读到的是...
  • 使用C语言写的课程设计,就是手机里面的猜数字游戏,eg:输入1234,返回结果2A1B。文件缺少文档。文档请另行下载,在我的资源中有。
  • c语言多组输入常用方法总结

    千次阅读 2021-01-15 21:16:43
    c语言中有一个标准输入函数,即:scanf函数,它可以读取输入的任意格式类型的数据。scanf函数也有返回值,返回类型为int类型,它返回成功读入的项目的个数。如果它没有读取任何项目(当它期望一个数字而您却键入了一...
  • 创建txt文件并且输入数字 刚开始的时候创建的文件一直无法被读取,运行程序时没有语法错误但一直输出“open file error”,经过多次修改代码却一直没有得到改变后,我意识到可能是程序与该文件不在同一目录下的缘故...
  • 如果它没有读取任何项目(输入非法字符,例如:希望得到数字,而用户却输入的是字符),scanf()返回值为0.当检测到“文件结尾”是,会返回EOF(EOF是在文件stdio.h中定义的特殊值,一般,#define指令把EOF的值定义为-1)...
  • C语言——>文件操作

    2021-04-06 21:06:34
    C语言提供了两种文件类型:文本文件和二进制文件 文本文件 文本文件又名(ASCLL码文件) 特点:文本文件中的每一位数字都单独占用一个字节的存储空间。 优点:文本文件可以很方便地被其他程序读取,包括文本编译器、...
  • 要做一个学生学籍管理系统,但是到文本输入的时候输进去了,txt文件也创建好了,打开文件就是一片空白,请各位帮帮忙,这是我的那一部分代码 #include #include typedef struct Student{ long StudentID; //...
  • 在测试排序时至少要敲162次键盘才可将这些数字输入,很麻烦 所以在同目录下写了一个data.txt 1234567890001 95 1234567890005 100 1234567890003 95 1234567890002 77 1234567890004 85 1234567890013 65 ...
  • 数字水印系统C语言

    2009-09-03 09:51:49
    该目录包含了基于可移植的C语言数字水印算法的代码。这些代码具有示范 性的意义,且有一定的鲁棒性。 需要安装NetPGM的程序包(用来存取pgm格式图像),然后才能在linux下面编译。 NetPGM是图像文件输入/输出...
  • C语言实验题――数字串求和 描述 求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个1~9的数字。例如2+22+222+2222+22222(此时共有5个数相加)。 输入 输入数据有多组,每组占一行,每行有两个数a和n(其中1<=a,n<=9),...
  • C语言_二进制文件

    2021-03-14 12:59:57
    当我们输入这些数字1,2,3,4,5的时候,实际上输入的是个字符串,这个字符串里面有1,2,3,4,5这个五个字符,那scanf()做的是什么,为什么不叫read,因为它不是直接输入我们输入的值,而是扫描、识别这个字
  • 各位学长,小生刚接触C语言不久,特别是文件操作,希望解答以下问题,不胜感谢: 1.fwrite函数的第三个参数的意思,百科的解释有点看不懂。。。 2.下面有一段小程序,为什么输入成绩时到第二个就没有了? 而且读取...
  • C语言 新奇版猜数字 大哥大姐帮帮忙 由电脑随机生成数,再由电脑猜,新奇版的猜数字游戏,用几A几B表示位置和数正确与否,尽量用最少的步数猜出来。 要步数最少的,可以帮我把每步的意思注释一下,谢谢各位...
  • C语言程序中,很多地方都需要手动输入数据。 比如你需要打印一串数组:0,1,2,3,4,5,6,7,8,9 第一步你需要一个一个数字在控制台输入。然后才能打印。 常规代码: for(int i=0;i<=10;i++) scanf("%d",&...
  • 文件名称:OJ总结-C语言实验——打印数字图形 作 者:王兴振 完成日期:2016年10月24日 版 本 号:未知 题目描述:  从键盘输入一个整数n(1≤n≤9),打印出指定的数字图形。 输 入:  正整数n(1≤n≤9...
  • c语言进行数据的多输入多输出

    千次阅读 2016-04-04 02:42:02
    c语言中有一个标准输入函数,即:scanf函数,它可以读取输入的任意格式类型的数据。scanf函数也有返回值,返回类型为int类型,它返回成功读入的项目的个数。如果它没有读取任何项目(当它期望一个数字而您却键入了一...
  • 第8章 文件; 本章主要介绍了文件的概念文件的打开与关闭文件的读/写操作理解文件读写原理区分ASCII码文件和二进制文件理解文件指针移动的含义以...编程从键盘输入一串字符用结束输入存放到一个文本文件中并统计该串字符
  • 46-关于文件C语言

    2020-11-24 22:27:04
    标准输入文件:常开,其文件指针 stdin; 标准输出设备:显示器 标准输出文件:常开,其文件指针 stdout; 文件名:全路径,相对路径 后缀名:关联默认打开它的应用程序 文件:文本文件,二进制文件 1:能看见的是字符1,数字1看...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 542
精华内容 216
关键字:

c语言文件输入数字

c语言 订阅