Tag: scanf

scanf没有读取输入

我阅读了更多关于scanf的post,我找到了一些没有帮助我的答案: while(!comanda){ int tmp; if (scanf(“%d”, &tmp) == 0) getchar(); else{ comanda = tmp; fprintf(stdout,”%d”,&comanda); fflush(stdout);} } } 问题是在这行代码执行后,没有任何反应。 在此之后,我检查了“comanda”,但没有执行。

c – while循环在输入错误后继续忽略scanf

我在论坛上搜索了解决方案,但仍然对我的代码产生的输出感到困惑。 所以,该程序非常简单。 它在输入处获得两个数字,直到到达文件末尾。 如果输入错误,则应将错误打印到stdout并继续进行下一对。 如果两者都是素数,它会打印出prime 。 否则,它会打印他们的GCD。 问题是,如果输入不好,即一个或两个数字实际上都不是数字,程序会跳过scanf并继续向stderr打印错误。 然而,在调试期间,我发现scanf()所有下一次迭代都会通过,它返回0 ,好像根本没有输入任何东西。 并且提示对于输入无效,因为程序不断打印到stderr。 nd和nsd分别是返回最大分频器和最大公约数的函数。 主要计划如下: #include #include “nd.h” #include “nsd.h” int main() { int a; int b; int inp_status = 0; while (1){ inp_status=scanf(” %d %d”, &a, &b); if (inp_status == EOF){ break; } else if (inp_status < 2){ fprintf(stderr, "Error: bad input\n"); } else { if […]

解析整数而不在C中附加char

我想解析一个整数,但我的下面的代码也接受像“3b”这样的字符串,它以数字开头,但附加了字符。 我如何拒绝这样的字符串? #include #include int main(int argc, char *argv[]) { int n; if(argc==2 && sscanf(argv[1], “%d”, &n)==1 && n>0){ f(n); return 0; } else{ exit(EXIT_FAILURE); } }

如何忽略fscanf()中的空格

我需要使用fscanf忽略所有的空格而不保留它。 我尝试使用类似(*)和[^\n]之间的组合的东西: fscanf(file,” %*[^\n]s”,); 当然它崩溃了,有没有办法只用fscanf做到这一点? 码: int funct(char* name) { FILE* file = OpenFileToRead(name); int count=0; while(!feof(file)) { fscanf(file,” %[^\n]s”); count++; } fclose(file); return count; } 解决了 ! 将原始fscanf()更改为: fscanf(file,” %*[^\n]s”) ; 完全按照fgets()读取所有行,但没有保留它!

scanf Cppcheck警告

Cppcheck为scanf显示以下警告: 消息:没有字段宽度限制的scanf可能会因巨大的输入数据而崩溃。 要修复此错误消息,请添加字段宽度说明符:%s =>%20s%i =>%3i可能崩溃的示例程序:#include int main(){int a; scanf(“%i”,&a); 返回0; 使它崩溃:perl -e’print“5”x2100000’| ./a.out 我无法崩溃这个程序输入“巨大的输入数据”。 我应该输入什么才能让这次崩溃? 我也不明白这个警告中最后一行的含义: perl -e …

sscanf行为/返回值

我是一名新手学习C并尝试通过在线讲座了解以下代码。 它扫描字符串中的整数; 如果遇到字符,则sscanf会失败。 int n; char c; if (sscanf(string, ” %d %c”, &n, &c) == 1) //return the integer else // fail 我已经阅读了sscanf的手册页,我仍然对检查返回值以及此代码的工作原理感到困惑。 他们声明“这些函数返回分配的输入项数”。 如果sscanf只遇到字符,它会将它们写入&c …但是在那种情况下&n将不会被写入。 在这种情况下,我会认为sscanf的返回值仍然是1?

C,如何一起使用fgets和fscanf

我有一份大学作业表。 那就是使用文件IO。 有这样的TXT文件: Brian s213551 50 70 70 50 Alex Fernandes s210011 70 81 50 89 Young Lee s211213 60 80 60 90 … and more 我必须读取此文件并保存到var in struct。 和教授 对我说。 我必须一起使用fgets和fscanf。 如果我只使用fscanf它不能正常工作,因为“Alex Fernandes”中有空间。 但即使我一起使用fgets和fscanf,它也不起作用..所以我需要帮助你。 这是我的来源: #include #include typedef struct sMember{ char name[10]; char id[10]; int score[4]; double avg; char grade; }MEM; int main(int argc, […]

为什么sscanf在bool类型下无法正常工作

这段代码的输出: const char *buff = “*_2D 1”; char field[10]; int flag; sscanf(buff, “%s %d”, field, &flag); printf(“field:%s flag:%i\n”, field, flag); 是field:*_2D flag:1 但是通过将int更改为bool导致奇怪的行为: const char *buff = “*_2D 1”; char field[10]; bool flag; sscanf(buff, “%s %d”, field, &flag); printf(“field:%s flag:%i\n”, field, flag); 输出为field: flag:1 任何人都可以解释这里发生的事情吗? 我会认为bool会被解释为一个int,它似乎是,但字符串的其余部分消失了。

`sscanf`保证不会改变它找不到的参数吗?

我有一个案例,我不确定我是否会获得足够的sscanf输入。 我可以安全地假设sscanf不会弄乱它找不到的任何参数吗? 例如,在此程序中: #include int main(int argc, char** argv) { int a = 0, b = 0, c = 0; sscanf(“1 2”, “%d %d %d”, &a, &b, &c); printf(“%d %d %d\n”, a, b, c); return 0; } 输出是: 1 2 0 因此,它读取了三个数字中的两个,并没有弄乱最后一个。 在这种情况下,我可以安全地假设所有编译器和标准库也将仅留下最后一个参数,或者我是否需要执行以下操作: int main(int argc, char** argv) { int a = 0, b = […]

scanf是否保证不会在失败时更改值?

如果scanf系列函数无法与当前说明符匹配,是否允许写入存储成功值的存储? 在我的系统上,以下输出213两次但是有保证吗? 标准中的语言(C99或C11)似乎没有明确指出原始值应保持不变(无论它是否不确定)。 #include int main() { int d = 213; // matching failure sscanf(“foo”, “%d”, &d); printf(“%d\n”, d); // input failure sscanf(“”, “%d”, &d); printf(“%d\n”, d); }