Tag: scanf

输入非ASCII字符到scanf(“%s”)

有没有办法可以向使用%s的scanf发出非asciihex字符? 我正在尝试插入hex字符,如\x08\xDE\xAD等等(以演示缓冲区溢出)。 输入不是命令行参数,而是程序内的scanf。

使用fscanf读取double

我想从文本文件中读取双倍,例如31 39.9316476397222 116.113516352222 我试过了两个,而不是工作。 我只能读取前几个十进制数字例如39.93164而不是39.9316476397222谁知道为什么? 谢谢! int NodeID; double _lat,_long; fscanf (pFile, “%d %lf %lf”, &NodeID,&_lat,&_long); printf (“I have read: %d %f %f\n”, NodeID,_lat,_long); fscanf (pFile, “%d %lf %lf”, &NodeID,&_lat,&_long); printf (“I have read: %d %lf %lf\n”, NodeID,_lat,_long);

使用C中的fscanf跳过行的剩余部分

我正在阅读一个文件,在读完一个数字之后,我想跳过剩下的那一行。 这是一个文件的例子 2 This part should be skipped 10 and also this should be skipped other part of the file 目前我通过使用这个循环来解决这个问题: char c = ‘\0′; while(c!=’\n’) fscanf(f, “%c”, &c); 然而,我想知道是否没有更好的方法来做到这一点。 我试过这个,但由于某种原因,它不起作用: fscanf(f, “%*[^\n]%*c”); 我本以为这会读到新行的所有内容然后再读新行。 我不需要内容,所以我使用*运算符。 但是,当我使用此命令时没有任何反应。 光标未移动。

使用fscanf逐行遍历FILE

好的,我有一个文本文件database.txt。 每行都是具有以下格式的用户 “John Smith”| 4| 80.00| “123 Lollipop Lane”| “New Jersey”| “08080” 当我尝试执行以下操作时: database = fopen(fileName,”r”); while(fscanf(database,”%[^\n]”, buffer) != EOF){ printf(“ATTEMPT TO: Insert user %s\n\n”, buffer); if (insert_Customer(clients, create_Customer(buffer)) < 0){ printf("\nERROR: Failed to insert and create customer %s\n", buffer); } else printf("\nSUCCESS: Inserted Customer %s\n\n", buffer); } 它在第一行运行正常,将ENTIRE行发送到create_Customer(char * buffer)函数。 出于某种原因,我不明白,在第一行后,它不断尝试发送“John Smith”,而不是继续前进到下一行。 我相信我的格式不正确,但我无法弄清楚如何完成我想要完成的工作,这是逐行读取此文件并将每行传递到create_Customer函数。

仅接受使用scanf输入的数值

如何确保用户仅输入数字值而不是字母数字或任何其他字符? 还有什么寻找插入错误信息的incorrent输入? #include int main() { int a, b, c; printf(“Enter first number to add\n”); scanf(“%d”,&a); printf(“Enter second number to add\n”); scanf(“%d”,&b); c = a + b; printf(“Sum of entered numbers = %d\n”,c); return 0; }

Scanf和循环

这里是一段代码,它应该循环遍历,直到用户输入0到15之间的数字 int input; do { printf(“Enter a number => “); scanf(“%d”,&input); printf(“\n %d \n”,input); } while (!(input>0 && input <15)); 但是,如果用户输入类似“gfggdf”的内容,则会导致循环重复一遍又一遍,并且从不提示用户再次输入…控制台看起来像这样 Enter a number => 0 Enter a number => 0 Enter a number => 0 Enter a number => 0 Enter a number => 0 Enter a number => 0 (looping indefinitely) 看完这本书后,似乎我需要做这样的事情来防止这种情况发生。 int […]

fscanf是否可以返回零并同时消耗输入?

fscanf是否可以消耗输入并同时返回零? 例如,如果我写 int res; int k = fscanf(f, “%d”, &res); 并检查k == 0 ,我可以确定fscanf在同一文件f上的下一次调用是否会在调用fscanf之前的文件所在的同一位置继续?

scanf读取“Enter”键

当我在下面的代码中输入“Enter”时,为什么scanf不起作用? #include #include #include int main(int argc, char**argv) { char *msg = malloc(100*sizeof(char)); do{ scanf(“%s”,msg); printf(“%s\n”,msg); } while(strcmp(msg,””)!=0); }

使用scanf进行validation检查在循环内不起作用

我正在尝试创建一个函数来检查用户的输入,并让他们再次尝试,以防他们输入错误的输入。 因此,当我在函数中输入错误的输入时,它会将我抛入无限循环。 我该怎么做才能解决它? 我被允许只使用getchar和scanf进行用户输入。 int sizeOfField() { int size,inputCheck,flag=0; while (!flag) { inputCheck= scanf(” %d “, &size ); if ( inputCheck < 1 ) { printf( "Invalid Input!\n" ); printf( "Try agian"); } else if (inputCheck == 1) flag=1; } return size; }

如果有人抱怨gets(),为什么不对scanf(“%s”,…)做同样的事情?

从man gets : 永远不要使用gets()。 因为如果事先不知道数据就不可能分辨出get()会读取多少个字符,并且因为gets()将继续存储超过缓冲区末尾的字符,所以使用它是非常危险的。 它已被用来打破计算机安全。 请改用fgets()。 几乎每个地方我都看到scanf以一种应该具有相同问题的方式使用( 缓冲区溢出/缓冲区溢出 ): scanf(“%s”,string) 。 这种情况存在这个问题吗? 为什么scanf手册页中没有关于它的引用? 为什么用-Wall编译时gcc不会发出警告? ps:我知道有一种方法可以在格式字符串中指定scanf字符串的最大长度: char str[10]; scanf(“%9s”,str); 编辑:我不是要求确定前面的代码是否正确。 我的问题是:如果scanf(“%s”,string)总是错误的,为什么没有警告,并且手册页中没有任何关于它的内容?