Tag: scanf

为什么scanf需要&?

我想从stdin读取一个数字。 我不明白为什么scanf需要在我的变量名之前使用& : int i; scanf(“%d”, &i); 为什么scanf需要变量的地址?

如何防止scanf()永远等待输入字符?

我想在控制台应用程序中完成以下事项: 如果用户输入字符,则应用程序将执行相应的任务。 例如,如果用户输入’1’,程序将执行任务1,如果用户输入’q’,程序将退出; 如果用户没有输入任何内容,程序将每10秒执行一次默认任务(时间不必非常严格)。 这是我的代码: #include #include char buff[64]; char command; while(command != ‘q’) { begin: printf(“>> “); scanf(“%s”, buff); command = buff[0]; switch (command) { case ‘1’: // task 1 code will be added here; break; case ‘2’: // task 2 code will be added here; break; case ‘q’: printf(“quit the loop.\n”); break; } […]

getc Vs getchar Vs Scanf用于从stdin读取字符

以下三个function: getc getchar&scanf 从stdin读取角色的最佳选择是什么?为什么? 这些function中是否存在任何已知的缺点或限制,使一个function优于另一个function?

scanf和double的问题

我无法理解为什么会发生这种情况:使用以下代码; #include int main() { double x=123; printf(“x is %f. Enter a new value for x.\n”, x); scanf(“%f”, &x); printf(“x is %f\n”, x); return 0; } 当您输入45678作为x的新值时,将打印“x为123.000017”。 我知道在扫描时使用%lf时这是固定的,但为什么在使用%f时会发生这种情况?

获取scanf以在读取换行符时退出?

如果我在终端输入5 5 ,按回车键,再次按回车键,我想退出循环。 int readCoefficents(double complex *c){ int i = 0; double real; double img; while(scanf(“%f %f”, &real, &img) == 2) c[i++] = real + img * I; c[i++] = 1 + 0*I; // most significant coefficient is assumed to be 1 return i; } 显然,该代码并没有为我完成工作(是的,我知道有一个缓冲区溢出等待发生)。 除非我输入一个字母(或一些非数字,而不是空白字符串),否则scanf不会退出。 读取空行后如何让scanf退出?

scanf:“%”跳过第二个输入,但“%”不跳过。 为什么?

请考虑以下代码: #include int main (void) { char str1[128], str2[128], str3[128]; printf (“\nEnter str1: “); scanf (“%[^\n]”, str1); printf (“\nstr1 = %s”, str1); printf (“\nEnter str2: “); scanf (“%[^\n]”, str2); printf (“\nstr2 = %s”, str2); printf (“\nEnter str3: “); scanf (“%[^\n]”, str3); printf (“\nstr3 = %s”, str3); printf (“\n”); return 0; } 执行时,只有第一个scanf停止提示。 该程序不会停止下一次scanf 。 但是如果格式字符串从”%[^\n]”更改为” […]

使用scanf – > ANSI C的最大字符串长度

我有: #define MAX_STR_LEN 100 我想放入scanf模式,所以我可以控制字符串长度: scanf(“%100[^\n]s”,sometext) 我试过了: scanf(“%MAX_STR_LEN[^\n]s”,sometext) scanf(“%”MAX_STR_LEN”[^\n]s”,sometext) scanf(“%”,MAX_STR_LEN,”[^\n]s”,sometext) 它没有用。 我只想避免缓冲区溢出,因为“sometext”分配了malloc(MAX_STR_LEN) … 有任何想法吗?

while循环第二次忽略scanf

#include int main () { char loop=’y’; while(loop != ‘n’) { printf(“loop? “); scanf(“%c”, &loop); if(loop != ‘y’) { loop=’n’; } } return 0; } 如果我键入’y’,他会重新启动while循环,但会在第二次忽略scanf并在此之后结束循环。 有人可以帮忙吗?

使用scanf()读取一行不好?

scanf(” %[^\n]”,line); 我的一个朋友建议使用fgets()读取一行作为输入比使用上面的语句中的scanf()更好。 他有道理吗?

为什么scanf(“%d”,)不消耗’\ n’? 而scanf(“%c”)呢?

在这里 ,我在接受的答案中看到了这个陈述: 大多数转换说明符跳过前导空格,包括换行符,但%c不跳过。 对我来说,不清楚这种不同行为的基本原理,我会期待一个统一的行为(例如总是跳过或从不)。 我用这样的一段C代码遇到了这种问题: #include “stdio.h” int main(void){ char ch; int actualNum; printf(“Insert a number: “); scanf(“%d”, &actualNum); // getchar(); printf(“Insert a character: “); scanf(“%c”, &ch); return 0; } 交换两个scanf解决了问题,以及(注释) getchar ,否则第一次插入的’\n’将由第二个scanf消耗%c 。 我在linux和windows上测试了gcc,行为是一样的: gcc(GCC)4.7.2 20120921(Red Hat 4.7.2-2) 版权所有(C)2012 Free Software Foundation,Inc。 这是免费软件; 查看复制条件的来源。 没有保修; 甚至不适用于适销性或特定用途的适用性。 所以我的问题是:为什么%d和%c行为与scanf ‘\n’不同?