gpt4 book ai didi

c++ - 使用 scanf 和 printf 会使程序无限循环,但通过替换 cin 和 cout 可以正常工作

转载 作者:行者123 更新时间:2023-11-30 19:24:55 25 4
gpt4 key购买 nike

我的问题是获取输入,直到用户输入测试值0,并且问题只能通过c语言解决,下面的代码通过使用scanfprintf变成无限循环 但如果用 C++ 编写相同的代码,它可以正常工作,没有问题,你能帮我解决我缺少的 C 程序吗?

#include <stdio.h>
#include <stdlib.h>
int main() {
int click,test=1,count=0;
char vote;
scanf("%d",&test);
while(test){
int i=0;
for(int i=0;i<test;i++){
scanf("%c",&vote);
scanf("%d",&click);
printf("%c %d hi \n",vote,click);
}
scanf("%d",&test);
}
//printf("%d\n",count);
return 0;
}
my test case was
2
P 1
P 2
2
P 2
M -2
0

在 C++ 中,我的输出与测试用例完全相同,但在 C 语言中,其 TLE 或输出限制超出

最佳答案

在处理 C 语言时,您应该始终检查运行时函数的返回值,这是避免出现类似错误的最佳方法。

scanf 返回它成功解析的项目数,如果失败则返回 0。

就我个人而言,我更喜欢使用 fgets() 从标准输入中读取,然后使用 sscanf 来解析缓冲区,这样您就可以(恕我直言)更好地控制进入程序的内容,而不是晦涩的 scanf 格式。使用 scanf 很容易犯错误,因为人们往往会忘记所有输入都已缓冲并且 scanf 从该缓冲区读取。

例如(仅目测编译)

int click = 0;
int test = 0;
char buffer[128];
char vote = 0;

do
{
if ( fgets(buffer,sizeof(buffer),stdin) != NULL)
{
// read number of tests
if (sscanf(buffer, "%d", &test) == 1)
{
for(int i=0; i < test; ++i)
{
if (fgets(buffer, sizeof(buffer), stdin) != NULL)
{
if (sscanf( buffer, "%c %d", &vote, &click) == 2)
{
printf( "%c %d hi \n", vote, click );
}
else
{
fprintf(stderr, "Invalid format encountered\n");
}
}
}
}
}
}
while (test);

关于c++ - 使用 scanf 和 printf 会使程序无限循环,但通过替换 cin 和 cout 可以正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59590616/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com