c - scanf 没有正确存储输入

标签 c string io

我的代码是这样的:

int nameFull;
printf("What is your name?\n");
scanf("%d\n", &nameFull); \\up until here it seems to work
printf("Hello %d", nameFull);

return 0;

但是无论我输入什么,我每次运行程序时的输出都是“Hello 0”。

有人知道如何解决这个问题吗?

最佳答案

首先 scanf() 不会发出提示,因此在格式字符串中使用任何尾随空白字符并不是一个好主意,例如 \n ,它将导致它读取并丢弃字符,直到下一个非空白字符。

要读一个名字,你可以这样做:

char name[50];
scanf("%49s",name); // 49 to limit the buffer input to prevent buffer overrun , this is a security issue.

您还应该检查 scanf 的返回值以查看操作是否成功。就个人而言,由于存在各种潜在问题,我根本不喜欢使用 scanf()。它仅将程序作者期望的内容作为输入,而不考虑用户可能意外输入的其他输入。查看herehere .还要检查 scanf() man page

更好更安全的方法是使用 fgets() ,

fgets(name,sizeof(name),stdin);

关于c - scanf 没有正确存储输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46386863/

相关文章:

java - 使用正则表达式用修改后的字符替换字符串中的序列

ruby - 在ruby中将字符串撤消为二进制

Android - 将 ostream 输出正确映射到 android native 日志?

Haskell:使用 Parsec 和 IO 解析文件

c - Eclipse CDT 内容协助未完成结构

c++ - 将自定义标签添加到 TIFF 文件

c - "#include"C 程序中作为 char[] 的文本文件

c - 使用递归创建哈希码函数

javascript - 使用javascript获取带有复选标记字符的字符串片段

java - 通过终止程序关闭流 - 常见做法?