如何清除C for循环中的缓冲区?
我正在参与一个涉及structs的学校项目,我遇到以下问题: 我创建了一个最多包含50个产品的结构。 用户将为每个产品输入整数代码、浮动价格、整数数量和字符名称[256] 我遇到的问题是如何清除C for循环中的缓冲区?,c,struct,scanf,C,Struct,Scanf,我正在参与一个涉及structs的学校项目,我遇到以下问题: 我创建了一个最多包含50个产品的结构。 用户将为每个产品输入整数代码、浮动价格、整数数量和字符名称[256] 我遇到的问题是scanf_s(“%c”,&product.name)溢出了“\n” 以下是代码片段: 我希望您理解我的问题,并能帮助我。您应该阅读以下内容: scanf(“%s”,名称) 您应该使用%s扫描字符串。 \0将自动添加到字符串末尾 请记住,您只有256字节的数据,如果您想添加更大的字符串,它将溢出 scanf(“
scanf_s(“%c”,&product.name)代码>溢出了“\n”
以下是代码片段:
我希望您理解我的问题,并能帮助我。您应该阅读以下内容:
scanf(“%s”,名称) 您应该使用%s
扫描字符串。
\0
将自动添加到字符串末尾
请记住,您只有256字节的数据,如果您想添加更大的字符串,它将溢出
scanf(“%s”,对象属性)代码>
因为你添加了C++标签。查看
std::string
对象和std::cin
std::getline(std::cin,str)
scanf
有它的位置,但它不是读取用户输入的唯一方法,尤其是在从stdin
读取行时。考虑使用<代码> fgs<代码>来读取这些行…
fgets(produse[contor].nume_produs, sizeof(produse[contor].nume_produs), stdin);
也会起作用
以下是有关的一些信息,请编辑您的帖子,将相关代码正确地放入内容中。如果它是一个,那就更好了。你是说getchar()
?也许你想要像scanf(“%s”,product.name)
这样的东西,在这里你可以读取一个字符串而不是单个字符?看看链接的“代码片段”。。。。一错再错。数组索引从零开始,因此具有n
元素的数组的最后一个元素具有索引n-1
。循环的数组索引从1开始。投票结束,因为这本质上是一个(愚蠢的)打字错误。两个错误:scanf
使用%s
格式将不会在字符串中添加换行符;而且,您不应该在字符串上使用运算符&
的地址。对于数组,它将导致参数的错误类型,对于指针,它将指向指针,scanf
将在完全错误的位置写入。感谢您的更正。我的意思是\0