Tag: scanf

在C中读取文件时跳过一行

我有一个问题,我没有找到一个有效的解决方案。 这很容易,但我不明白该怎么做。 我有一个包含一些行的文件,例如: \#comment \#comment icecream 5 pizza 10 pie 7 \#comment tortillas 5 fajitas 5 我希望我的程序只读取不以#开头的行。 FILE *pf; char first [20], second [20]; pf = fopen(“config.conf”, “r”); if (pf) { while (! feof(pf)) { fscanf(pf, “%s \t “, first); while(!strcmp(first,”#”)){ `HERE I NEED JUMP TO NEXT LINE` fscanf(pf, “%s \t “, first); } fscanf […]

scanf到struct不起作用

我有这个function,我需要获得一个结构的坐标。 这些是结构: // ——— ———-结构 typedef struct coordinates { int x_l; int y_l; int x_r; int y_r; } Coordinates; typedef struct field { char Id; Coordinates location; int area; int price; } Field; 这是function: Field GetFieldFromUser(int cptr,Field *pf1) { //Field *pf int i=0; printf(“\nPlease enter information for your new field:\n”); printf(“the Id of the field […]

Eclipse / MiniGW中的scanf问题

我试图在eclipse中运行以下代码,但控制台保持空白,直到我停止程序,此时输出“输入下一个值(<= 0退出)2130567168分钟是35509452小时,48分钟。” 一遍又一遍地重复着。 似乎scanf由于某种原因设置了一些默认值…无法弄清楚原因。 在程序停止之前我没有看到任何东西所以我认为它可能与printf没有被冲洗有关,但我确保使用\ n强制刷新。 有任何想法吗? #include const int MIN_PER_HOUR = 60; // minutes per hour int main(void) { int hour, min, left; printf(“Convert minutes to hours and minutes!\n”); printf(“Enter the number of minutes ( 0){ hour = min / MIN_PER_HOUR; // truncated number of hours left = min % MIN_PER_HOUR; // number of […]

从.txt C读取

我在使用C语言时遇到了一些麻烦.. 我有一个文件txt与表单中的各种行: F 65 S 4 1 139.56 3704.26 和我的计划: p = fopen(“dados.txt”, “r”); if ( p == NULL) { printf(“\n\nNao foi possivel abrir o arquivo.\n”); exit(1); }else{ while ( !feof(p) ){ fscanf(p,”%c %d %c %d %d %f %f”, &sexo,&idade,&estadoCivil,&numFilhos,&freq,&mediaGasto,&mediaSalarial); printf(“%c %d %c %d %d %f %f\n”, sexo,idade,estadoCivil,numFilhos,freq,mediaGasto,mediaSalarial); } 回报是: 看起来不好…… 如果我将fscanf:%c更改为%f 回报是: 看起来很棒,但变量idade总是0 ……:S […]

使用fscanf()使用C解析逗号分隔文件

我有一个数据类似的文件 – Name, Age, Occupation John, 14, Student George, 14, Student William, 23, Programmer 现在,我想读取数据,使每个值(例如Name,Age等)作为字符串读取。 这是我的代码片段 – …. if (!(ferror(input_fp) || ferror(output_fp))) { while(fscanf(input_fp, “%30[^ ,\n\t]%30[^ ,\n\t]%30[^ ,\n\t]”, name, age_array, occupation) != EOF){ fprintf(stdout, “%-30s%-30s%-30s\n”, name, age_array, occupation); } fclose(input_fp); fclose(output_fp); } …. 然而,这进入无限循环,给出一些随机输出。 这就是我理解input conversion specifiers 。 %30[^ ,\n\t] – >读取一个长度最多为30个字符的字符串 不包括空格,逗号,换行符或制表符。 我正在阅读3个这样的字符串。 我哪里错了?

为什么不是scanf(“%* \ n”); 和scanf(“%* %* c”); 清除挂线?

调用scanf(“%d”, &variable); 我们留下了一个挂在stdin的换行符,它应该在调用fgets之前清除,或者我们最终将它换成换行符并使其过早返回。 我找到了建议使用scanf(“%*[^\n]%*c”);答案scanf(“%*[^\n]%*c”); 在第一次调用scanf以丢弃换行符后,其他人建议使用scanf(“%*[^\n]\n”); 。 从理论上讲,两者都应该有效:第一个会消耗所有非换行符(但不包括换行符本身),然后只消耗一个字符(换行符)。 第二个将消耗所有非换行符(不包括它),然后\n ,一个空白字符,将指示scanf读取每个空白字符直到第一个非空白字符。 然而,尽管我看起来这些方法在某些答案中起作用,但我无法让它们在这里工作(下面的代码)。 为什么scanf方法都scanf ? 测试:Ubuntu Linux – gcc 5.4.0 scanf(“%*[^\n]\n”); 做法: #include int main(int argc, char **argv){ int number; char buffer[1024]; printf(“Write number: \n”); scanf(“%d”, &number); //Clearing stdin? scanf(“%*[^\n]\n”); printf(“Write phrase: \n”); fgets(buffer, 1024, stdin); printf(“\n\nYou wrote:%u and \”%s\”\n”, number, buffer); return 0; } 输出: $ ./bug […]

使用scanf读取行或打破特殊字符

是否可以使用scanf()读取文本行 – 排除\n并打破特殊(选定)字符,但包含该字符 这是我当前的表达式: while(scanf(“%49[^:\n]%*c”, x)==1)但是这个不包括: 。 有可能打破阅读:但也读这个角色?

scanf格式忽略不相关的字符

我写了一个简短的示例代码来说明我的问题 #include #include unsigned parseAndCompareDouble(const char* inSTR, const char* inF, const char * expect, const char * outF){ unsigned e = 0; char buffer[2000]; double a = 0; if( 1 != sscanf_s( inSTR, inF, &a, sizeof(double) ) ) e += 1; if( (int) strlen(expect) != sprintf_s(buffer, 2000, outF, a) ) e += 1; if( 0 […]

不同scanf格式之间的差异

我正在通过阅读教科书为编程学校做准备。 有一个我不明白的特殊问题,教科书没有给出答案。 PS:我已经在网上学过一些C ++ / C#,但是从来没有通过正确教授的编程课程,所以我在努力学习一些概念。 问:对于以下每对scanf格式字符串,请指明两个字符串是否相同。 如果不是,请说明如何区分它们。 A) “%d”与” %d” B) “%d-%d-%d”对”%d -%d -%d” C) “%f”与”%f ” D) “%f,%f”与”%f, %f” 首先,我甚至不明白问题是什么。 教科书的意思是2个字符串是否“等价”? 如果是,有人可以解释这些差异,并可能告诉我如何区分它们吗?

什么是hh和h格式说明符的需要?

使用hhx而不是x的用法是什么,在下面的代码中, mac_str是char指针 , mac是uint8_t数组 , sscanf(mac_str,”%x:%x:%x:%x:%x:%x”,&mac[0],&mac[1],&mac[2],&mac[3],&mac[4],&mac[5]); 当我尝试上面的代码时它发出警告, warning: format ‘%x’ expects argument of type ‘unsigned int *’, but argument 8 has type ‘uint8_t *’ [-Wformat] 但我在他们指定的一些代码中看到了 sscanf(str,”%hhx:%hhx:%hhx:%hhx:%hhx:%hhx”,&mac[0],&mac[1],&mac[2],&mac[3],&mac[4],&mac[5]); 哪个不给任何警告 但两者的工作方式相同,使用hhx代替x的需要是什么,我在网上搜索但没有直接回答