Tag: scanf

gets和scanf有什么区别?

如果代码是 scanf(“%s\n”,message) VS gets(message) 有什么区别?似乎他们都得到了消息的输入。

ANSI C(ISO C90):scanf可以读取/接受unsigned char吗?

简单的问题:scanf可以读取/接受“小整数”到ANSI C中的unsigned char吗? 示例代码un_char.c: #include #include int main(void) { unsigned char character; scanf(“%hhu”, &character); return EXIT_SUCCESS; } 编译为: $ gcc -Wall -ansi -pedantic -o un_char un_char.c un_char.c: In function ‘main’: un_char.c:8: warning: ISO C90 does not support the ‘hh’ gnu_scanf length modifier ISO C90不支持hh 。 那么在这种情况下可以使用什么scanf转换?

如何通过fscanf找到EOF?

我在fscanf()的帮助下通过文件读取矩阵。 我怎样才能找到EOF? 即使我试图在arr []中捕获的每个字符串后找到EOF,那么我也无法找到它。 在计数的帮助下,我正在读取输入文件 -12 23 3 1 2 4 int main() { char arr[10],len; int count=0; FILE *input= fopen(“input.txt”, “r”); while(count!=7) { fscanf(input,”%s”,arr); //storing the value of arr in some array. len=strlen(arr); count++; if(arr[len+1]==EOF) printf(“\ni caught it\n”);//here we have to exit. } return 0; } 而不是计数我想通过EOF退出循环。 怎么解决?

如何从scanf中识别字段分隔符?

我需要读取一个文本文件,其名称如下所示。 rENLAg:12182 TgAlKd:19773 SSqUpz:16466 QYStPh:4113 CodNhz:28920 SgoIGz:25343 我需要将数字与数字分开.fscanf仅标识空格,但不标识其他字段分隔符。 因此我该怎么做?

C中是/否循环

我只是不明白为什么这个Yes / No循环不起作用。 有什么建议? 鉴于输入是“Y”。 我只是想让它运行循环,然后再次询问Y或N. 如果是Y,则打印成功,如果是N,则打印出良好的再见声明。 什么原因? int main(){ char answer; printf(“\nWould you like to play? Enter Y or N: \n”, answer); scanf(“%c”, &answer); printf(“\n answer is %c”); while (answer == ‘Y’){ printf(“Success!”); printf(“\nDo you want to play again? Y or N: \n”); scanf(“%c”, &answer); } printf(“GoodBye!”); return 0; }

C编程 – 循环直到用户输入数字scanf

我需要帮助我的程序错误检查。 我要求用户输入一个整数,我想检查用户输入是否为整数。 如果没有,请重复scanf。 我的代码: int main(void){ int number1, number2; int sum; //asks user for integers to add printf(“Please enter the first integer to add.”); scanf(“%d”,&number1); printf(“Please enter the second integer to add.”); scanf(“%d”,&number2); //adds integers sum = number1 + number2; //prints sum printf(“Sum of %d and %d = %d \n”,number1, number2, sum); //checks if sum […]

将CSV文件中的值读入变量

我正在尝试编写一段简单的代码来读取CSV文件中的值,最多包含100个条目到一个结构数组中。 CSV文件的一行示例: 1,先生,詹姆斯,奎格利,主任,200000,0 我使用以下代码读取值,但是当我打印出值时,它们是不正确的 for(i = 0; i < 3; i++) /*just assuming number of entries here to demonstrate problem*/ { fscanf(f, "%d,%s,%s,%s,%s,%d,%d", &inArray[i].ID, inArray[i].salutation, inArray[i].firstName, inArray[i].surName, inArray[i].position, &inArray[i].sal, &inArray[i].deleted); } 然后当我打印出第一个名字时,这些值都被分配给第一个名字: for(j = 0; j < 3; j++) /* test by printing values*/ { printf("Employee name is %s\n", inArray[j].firstName); } 以这种方式给出ames,Quigley,Director,200000,0等等。 我确定这是我如何格式化fscanf线但我不能让它工作。 这是我正在阅读的结构: typedef […]

使用scanf读取带空格的字符串?

我希望以下内容要求输入,然后接受一个字符串(带空格),然后再做一次。 但在输入第一个字符串后,它会重复输出“input $”。 char command[80]; while(1) { printf(“input$ “); scanf(“%[^\n]”, command); } 我的输出: nput$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ input$ […]

使用scanf()获取多个值

我正在使用scanf()从用户那里获取一组int。 但我希望用户一次提供所有4个整数而不是4个不同的提示。 我知道我可以通过以下方式获得一个值: scanf( “%i”, &minx); 但我希望用户能够做到这样的事情: Enter Four Ints: 123 234 345 456 是否有可能做到这一点?

扫描溢出(“%8s”,字符串)?

我知道溢出普通代码是可能的: char string [9]; scanf(“%s”,string)。 但是有可能溢出scanf(“%8s”,字符串)? 图8只是一个例子。 我知道“%8s”就像分隔符一样,但我也注意到当我输入长度超过8个字符的字符串时,程序将因以下原因而终止: *堆栈粉碎检测到* :./a.out终止 ======= Backtrace:========= … 显然,有一个标志可以检测GCC默认打开的堆栈粉碎。 由于这是一个堆栈粉碎,我的猜测是它仍然可以溢出并执行任意代码。 与正常溢出相反,会破坏scanf(“%s”)的调用者,如果scanf(“%8s”)可能溢出,它将在scanf函数内溢出,以便当scanf尝试返回时,获得控制权。 但是scanf是一个系统调用,它需要模式切换(从用户模式切换到内核模式),并且在内部它会调用诸如read之类的东西到stdin等。所以不确定我们是否可以在内核模式或其他东西中溢出.. 欢迎评论!! 更新>> 在上面的例子中假设了char字符串[9]。 char字符串[8]在以下实际代码中。 问题实际上是关于安全扫描(“%8s”)和GCC流产之间由于堆栈粉碎而看似矛盾的故事。 简化代码: void foo(pass some pointer) { char input[8]; int input_number = 0; while (1) { // looping console printf some info; scanf(“%8s”, input); input_number = atoi(input); if ((strlen(input) == 1) && (strncmp(input, “q”, […]