Tag: scanf

getc和fscanf之间的区别

为什么以下代码工作正常: #include int main() { FILE *fp=fopen(“input.txt”,”r+”); char c; while((c=getc(fp))!=EOF) { printf(“%c”,c); } fclose(fp); return 0; } 但是这段代码给出了错误“分段错误,核心转储”: #include int main() { FILE *fp=fopen(“input.txt”,”r+”); char c; while((c=fscanf(fp,”%c”,&c))!=EOF) { printf(“%c”,c); } fclose(fp); return 0; } input.txt包含一个以空格分隔的字符列表,如:abcdef

使用char和scanf“%hhu”时输入值无效

所以这就是代码 void main() { unsigned char n,t; scanf(“%hhu %hhu”,&n,&t); printf(“%hhu %hhu”,n,t); } 问题是当我分别输入5和1时,输出为0和1. 0表示n ,1表示t 。 但是,当我将类型从char更改为int / unsigned时,输出是正确的:5和1。 问题是为什么用char输入(数字)输入会给出无效值?

C – 当时读取一个int

我有这个输入: 输入:2015年 我想像这样扫描他: scanf(“%1d”, &arr); 但这绝对是错误的。 我能做什么? 我希望通过整数接收输入整数,如’2’,’0’,’1’,’5’,而不是像“2015”。

尝试将浮点数读入数组时,scanf崩溃

这是我的代码: double values[8], cumulative[8]; printf(“Enter first decimal number: “); scanf(“%f”, values[0]); printf(“values[0] = %g”, values[0]); 我的问题是scanf语句崩溃程序,第二个printf永远不会执行。 我最初的尝试是用双精度填充数组的每个插槽,但由于这不起作用,我将程序简化为此,但这也不起作用。 我是一个初学者学习C,所以我可能犯了一个我看不见的愚蠢错误。 任何帮助将不胜感激,谢谢! 编辑: 好的,显然我需要在scanf语句中添加一个&符号。 但我认为数组只是指向数组第一个元素的指针? 为什么我必须使用&符号?

如何通过读取文件将不同数据类型的数据推入向量?

我想使用下面的代码将下面的数据推送到一个向量。但我的代码只适用于整数。我如何为以下数据执行此操作? 谢谢。 我的数据: M,0.455,0.365,0.095,0.514,0.2245,0.101,0.15,15 M,0.35,0.265,0.09,0.2255,0.0995,0.0485,0.07,7 F,0.53,0.42,0.135,0.677,0.2565,0.1415,0.21,9 M,0.44,0.365,0.125,0.516,0.2155,0.114,0.155,10 I,0.33,0.255,0.08,0.205,0.0895,0.0395,0.055,7 I,0.425,0.3,0.095,0.3515,0.141,0.0775,0.12,8 F,0.53,0.415,0.15,0.7775,0.237,0.1415,0.33,20 F,0.545,0.425,0.125,0.768,0.294,0.1495,0.26,16 M,0.475,0.37,0.125,0.5095,0.2165,0.1125,0.165,9 F,0.55,0.44,0.15,0.8945,0.3145,0.151,0.32,19 我的代码: fp = fopen(argv[1], “r”); //Opening the input file in read mode. if(!fp) { printf(“open data source file failed!\n”); goto MAINEXIT; } int ivalue; //extract data from files while(fscanf(fp,”%d,”,&ivalue)!=EOF) { printf(“Counter-%d\n”,counter++); srcdata.push_back(ivalue); //Pushing value by value into the vector with “,” delimiter. […]

在C中跳过了getchar()和scanf()

我目前正在编写一个程序,将一个文件的文本复制或附加到另一个文件中。 当提示用户是否要覆盖或追加文件时,我的问题就出现了,我们都跳过了scanf()和getchar()。 我尝试过使用getchar()和scanf()以及fflush(stdin)的多种组合,并确保我打开的所有文件都很接近,但我仍然无法输入选择。 包含第一个提示的代码的特定部分在这里。 `/****************PROMPT FOR OVERWRITE****************/ printf(“Would you like to overwrite the Destination File?\n”); printf(“1=NO,2=YES=”); scanf(“%d”, &overwriteAnswer); if(overwriteAnswer == 2) { ` 这个scanf()或者当我使用getChar()时,它只是被跳过,并且每次执行代码时通常都会填充不同的负数。 完整代码如下 if((infile = open(argv[1], O_RDONLY)) == 0) { /****************INPUT FILE OPENED****************/ printf(“%s open\n”,argv[1]); if ((outfile = access(argv[1], F_OK)) == 0 ) { /****************PROMPT FOR OVERWRITE****************/ printf(“Would you like to overwrite the […]

保存当前的读取位置,以便我可以在以后查找

我有一个程序读取具有已知结构的文本文件。 例如,我在文件的每一行都有两个整数和一个字符串。 当我在循环中使用fscanf ,我可以重新获得如上所述的n结构。 如何在数据文件中获取当前位置,因此我将其存储在某处,然后继续从我之前停止的位置读取我的文本文件。

用sscanf读取字符串的剩余部分

我正在尝试读取一个字符串,该字符串由一组数字后跟一个字符串组成,并包含一些其他基本文本。 换句话说,行的格式是这样的: Stuff 天真地,我试过: sscanf(str,”Stuff”,&i1,&i2,&i3,&i4,str2); 但经过一些研究,我发现%s应该在它到达空格字符时停止解析。 我发现了这个问题 ,但没有一个答案解决了我遇到的问题:字符串中可能包含任何字符,包括换行符和正确的转义引号。 后者不是问题,如果我可以让sscanf将第一个引用后的所有内容放在我提供的预分配缓冲区中,我可以自行删除结束。 但是我该怎么做? 我不能使用%[]因为它需要一些东西来终止字符串,我唯一要终止它的是null终止符。 所以我想,“嘿,我只会使用空终结器!” 但%[\0]让编译器变得脾气暴躁: warning: no closing ‘]’ for ‘%[‘ format warning: embedded ‘\0’ in format warning: no closing ‘]’ for ‘%[‘ format warning: embedded ‘\0’ in format 使用像%*c这样的东西也不会起作用,因为我不确切知道需要采取多少个字符。 我尝试传递strlen(str)因为它会小于那个,但是sscanf返回4并且没有任何东西放入str2 ,这表明可能因为长度太长而放弃了并且没有打扰。 更新:我想我可以做类似的事情: sscanf(str,”Stuff<%d,%d,%d,%d,\"%n",&i1,&i2,&i3,&i4,&n); str2 = str+n;

使用sscanf()格式说明符validation电子邮件地址

这可能有点像“修复我的代码”问题,但我看过文档 , 示例和几十个 相关的 问题 ,虽然我在逻辑上或多或少地了解它是如何工作的,但我有麻烦将其转换为C sscanf()格式代码。 我仍然是C的新手,我刚刚开始略微超越简单化的东西,而且我无法找出更复杂的格式说明符(即。 %[^…]等)。 无论如何,这就是我所拥有的: char user[EMAIL_LEN]; char site[EMAIL_LEN]; char domain[4]; if(sscanf(input, “%s@%s.%3s”, user, site, domain) != 3){ printf(“–ERROR: Invalid email address.–\n”); } 为什么不起作用? 我只是想获得一个简单的aaaa@bbbb.ccc格式,但由于某种原因, sscanf(input, “%s@%s.%3s”, user, site, domain)总是评估为1 。 我是否需要使用一些疯狂的%[^…]魔法才能正确转换? 我一直在搞乱%[^@]和那种事情,但我似乎无法让它发挥作用。 任何和所有的帮助表示赞赏。 谢谢!

在C中重复程序function失败,scanf相关吗?

所以我试图询问用户是否愿意重复我的程序,我偶尔得到一个奇怪的结果。 它不会每次都发生,我无法弄清楚触发它的原因。 对我来说,在我输入’q’到repeatProgram而不是’q’后,它会分配’return’,但我不知道为什么。 工作时的输出: 退出输入q,继续输入y。 小号 你已输入s,这不是一个有效的选项。 失败时的输出: 退出输入q,继续输入y。 q 你进去了 ,这不是一个有效的选择。 代码: char RepeatProgramPrompt() { char repeatProgram; do { printf(“\nTo exit enter q, to continue enter y.\n”); scanf(“%c%*c”, &repeatProgram); repeatProgram = tolower(repeatProgram); if(repeatProgram != ‘y’ && repeatProgram != ‘q’) { printf(“\nYou’ve entered %c, that isn’t a valid option.\n”, repeatProgram); } }while(repeatProgram != ‘y’ && […]