Tag: scanf

带冒号(:)分隔数据的fscanf

我如何fscanf这段数据? 数据和分隔符之间没有空行是’:’ VS1234567890654327:Rob Fordfirst:001:200 VS1234567890654312:Steven Harper:200:010 我的代码 while(3==fscanf(filename, “????”, &string[size], &name[size], &number1[size], &number2[size])) { //printf(“%s – %s – %.3d – %.3d”, string[size], name[size], number1[size], number2[size])); size++; }

当你输入像12ab这样的东西到scanf(“%d”,&争论)时会发生什么?

当我想检查输入的数字时,我遇到了这个问题。 如果我成功输入数字,scanf函数将返回1。 所以这就是我写的: int argu; while(scanf(“%d”,&argu)!=1){ printf(“Please input a number!\n”); } 但是当我输入像abcd这样的东西时,循环将会永远存在并且不会因为提示而停止。 我在网上查了一下,发现它与缓存有关,我需要清理它,所以scanf可以获得新数据。 所以我尝试了fflush,但它没有用。 然后我看到了这个: int argu,j; while(scanf(“%d”,&argu)!=1){ printf(“Please input a number!\n”); while((j=getchar())!=’\n’ && j != ‘\n’); } 然后,当我输入像’abcd’这样的东西时,它运作良好,并提示我输入。 但是当我输入像“12ab”这样的东西时,它就不会再起作用了。 那么有没有办法可以检查scanf的输入(“%d”,&argu)实际上是一个数字,如果不是,则提示另一个输入? 编辑 : 我看到了答案,并通过使用while(*eptr != ‘\n’)解决了我的问题。 请注意, fgets函数实际上是对数组读取’\ n’而fget没有。 所以要小心。

printf不产生输入值

我有以下代码块。 最后一行用于产生用户输入的X , Y和P值的值。 但它只会返回 (0,0,0) 而不是用户给出的值。 我错过了什么? printf(“What is the robot’s initial X position? (cm)\n”); scanf(“%f”,&X); printf(“What is the robot’s initial Y position? (cm)\n”); scanf(“%f”,&Y); printf(“What is the robot’s initial angular position? (degrees)\n”); scanf(“%f”,&P); printf(“The initial position is (%d, %d, %d)\n”, X,Y,P);

使用C中的fscanf()读取文件

我需要从文件中读取和打印数据。 我写的程序如下, #include #include int main(void) { char item[9], status; FILE *fp; if( (fp = fopen(“D:\\Sample\\database.txt”, “r+”)) == NULL) { printf(“No such file\n”); exit(1); } if (fp == NULL) { printf(“Error Reading File\n”); } while(fscanf(fp,”%s %c”,item,&status) == 1) { printf(“\n%s \t %c”, item,status); } if(feof(fp)) { puts(“EOF”); } else { puts(“CAN NOT READ”); } getch(); […]

为什么建议在scanf格式字符串中添加前导空格?

我目前正在阅读这本书“初学者的C11编程”,并在scanf()章节中说: “始终在第一个控制字符串字符前添加前导空格,以确保准确的字符输入。” 如: scanf(” %s”, whatever); 控制字符串%s,前面有一个空格。 我知道这听起来很不言自明,但我并没有真正得到可能出错的地方,以及这个空间如何确保准确的字符输入。 提前致谢。

格式字符串中的空格(scanf)

请考虑以下代码: #include int main() { int i=3, j=4; scanf(“%dc %d”,&i,&j); printf(“%d %d”,i,j); return 0; } 如果我必须更改变量的值,我可以将2c3或2 c 3或2c 3作为输入。 如果我希望用户输入我想要的相同模式,我该怎么办意味着如果%dc%d然后只有2c3是可接受的而不是2 c 3 ,反之亦然如果它是%dc %d ?

使用fscanf读取线条

嗨,我有一个文件,其中包含以下行: wwa weweweof ewewe wdw: 1 11 ms <1 ms <1 ms 174.78.134.1 2 11 ms <1 ms <1 ms 174.78.134.1 3 5 ms <1 ms <1 ms x58trxd00.abcd.edu.com [143.71.290.42] 4 11 ms <1 ms <1 ms 174.78.134.1 我在用 if(linecount == 8) while( fscanf(fp, “%d %s %s %s %s %s %s”,&a1,&a2,&a3,&a4,&a5,&a6,&a7,&a8) != EOF ){ printf(“%s”,ch); […]

如何在c中使用scanf读取空格?

问题:我需要能够识别连续出现两个空格的时间。 我读过以下问题: 如何从\ n分隔文件中读取字符串 如何用空格读取scanf 我知道scanf问题: http : //c-faq.com/stdio/scanfprobs.html 输入将采用以下格式: 1 5 3 2 4 6 2 1 9 0 两个空格表示需要处理下一组数据并与其自身进行比较。 线的长度未知,每组中的数字或整数是未知的。 两个空格是分隔下一个数据集的最多空格。 虽然我可以使用fgets和各种内置函数来解决这个问题,但我现在处理scanf问题可能会更容易。 但是,如果情况并非如此,使用fgets,strtok和atoi将完成大部分工作,但我仍需要连续识别两个空格。 下面将采用整数直到输入非整数。 while(scanf(“%d”,&x)== 1) 我需要做的是读取空格,如果有两个连续的空格,我将使程序与下一组数据做一些不同的事情。 一旦我得到一个白色空间,我不知道该怎么说: if((input ==“whitespace”)&&(previousInput ==“whitespace”)) 雅达亚达 else(input ==“whitespace”) 雅达亚达 其他 雅达亚达 感谢您的时间,感谢您的帮助。 获得的经验:尽管Jonathan Leffler在下面发布了scanf的解决方案,但解决方案对于getc来说更为直接(通过对内部scanf,正则表达式和char的更少了解)。 回想起正则表达式的更好的知识,scanf和char会使问题变得更容易,当然知道哪些函数是可用的,哪一个是从一开始就使用的最好的函数。

如何使用像scanf 这样的函数使用int16_t或int32_t

我在C中理解int16_t或int32_t的方式是它们在你的计算机上被分别定义为16位和32位数。 我相信当你需要保证数字为16或32位时你会使用这些,因为不同的系统并不总是将int表示为32位或short 16位(这个假设是正确的吗?当我在线查看时,我找到了混合的答案)。 我的问题是当我要求它们实际上是16位或32位或者其他什么时,我将如何使用像scanf这样的函数来获取来自用户的输入,其中包含int16_t或int32_t或任何其他类型定义的数字类型? 有某种特殊的字符串修饰符吗? 通常情况下,如果我想从用户那里获得一个int而不关心它实际表示的大小,因为我会写这样的东西 scanf(“%d”, &int); 这是有效的,如果我传入一个int32_t但我认为这只是因为我的系统上的一个int是32位而且它没有特别给我一个32位数而是它只给了我一个int 。 如何获得保证为32位的数字呢? 我已经查看了这个字符串修饰符和其他一些地方的页面,但没有提到这些类型定义的数字类型。 编辑:自从收到我的问题的答案后,我做了一些谷歌搜索并找到了这个 。 我也把它包含在下面以供参考。 uppercase hexadecimal printf format for uintptr_t #define SCNd16 “d” decimal scanf format for int16_t #define SCNd32 “ld” decimal scanf format for int32_t #define SCNd8 “hhd” decimal scanf format for int8_t #define SCNdFAST16 “d” decimal scanf format for int_fast16_t #define SCNdFAST32 […]

为什么glibc的sscanf比Linux上的fscanf慢得多?

我在x86_64 Linux上使用GCC 4.8和glibc 2.19。 在针对不同的问题使用不同的输入法时,我比较了fscanf和sscanf 。 具体来说,我会直接在标准输入上使用fscanf : char s[128]; int n; while (fscanf(stdin, “%127s %d”, s, &n) == 2) { } 或者我首先将整个输入读入缓冲区,然后使用sscanf遍历缓冲区。 (将所有内容读入缓冲区需要花费很少的时间。) char s[128]; int n; char const * p = my_data; for (int b; sscanf(p, “%127s %d%n”, s, &n, &b) == 2; p += b) { } 令我惊讶的是, fscanf版本的速度要快得多。 例如,使用fscanf处理数万行需要这么长时间: 10000 0.003927487 […]