C 为什么我没有得到正确的输出
我正在写一段代码,要求以C 为什么我没有得到正确的输出,c,C,我正在写一段代码,要求以p0xy的格式获得两个特定的点。 如果用户键入Q,则程序终止,由于某种原因,我无法将用户输入(p0xy)输出到输出中。当我尝试运行代码并键入p023时,它表示我选择了点023.00 而所需的输出是p023 #include <stdio.h> void main() { float a, b; char Q, P, input; printf(""); scanf("%c", &input); if (in
p0xy
的格式获得两个特定的点。
如果用户键入Q
,则程序终止,由于某种原因,我无法将用户输入(p0xy
)输出到输出中。当我尝试运行代码并键入p023
时,它表示我选择了点023.00
而所需的输出是p023
#include <stdio.h>
void main() {
float a, b;
char Q, P, input;
printf("");
scanf("%c", &input);
if (input == 'Q') {
printf("quitting program");
return (0);
} else {
scanf("%c" "%f" "%f", &input, &a, &b);
printf("you have chose points: %c %f %f", input, a, b);
}
return (0);
}
#包括
void main(){
浮子a、b;
字符Q,P,输入;
printf(“”);
scanf(“%c”,&input);
如果(输入='Q'){
printf(“退出计划”);
返回(0);
}否则{
scanf(“%c”“%f”“%f”“,&input,&a,&b);
printf(“您选择了点:%c%f%f”,输入,a,b);
}
返回(0);
}
因为您使用了两个scanf
。首先scanf
读取P
,然后从命令行(从stdin
)读取0
。所以在第二次scanf
之后,input='0'
。这就是程序打印0 2.00 3.00
如果要打印出P0
,则必须使用字符串,例如以下示例:
#include <stdio.h>
int main()
{
float a, b;
char Q, P, input;
char point[3] = {'\0'};
scanf( "%c" , &input);
point[0] = input;
if(input=='Q')
{
printf("quitting program");
return 0;
}
else
{
scanf( "%c" "%f" "%f", &input, &a, &b);
point[1] = input;
printf("you have chose points: %s %f %f",point, a, b);
}
return 0;
}
#包括
int main()
{
浮子a、b;
字符Q,P,输入;
字符点[3]={'\0'};
scanf(“%c”,&input);
点[0]=输入;
如果(输入=='Q')
{
printf(“退出计划”);
返回0;
}
其他的
{
scanf(“%c”“%f”“%f”“,&input,&a,&b);
点[1]=输入;
printf(“您选择了点:%s%f%f”,点a、点b);
}
返回0;
}
另一个答案也提到,当检查输入中的Q
时,输入字节被消耗。C标准库为这个特定的问题提供了一个解决方案:您可以将消耗的字节“返回”到输入设备(键盘缓冲区),然后重试从输入读取
该功能是ungect
。它需要非常具体的语法(您应该“unget”与刚才读取的值相同的值;您还必须使用stdin
来指定您正在使用键盘),并且只适用于一个字节,完全符合您的需要
这是你的代码和我的更新和评论
#include <stdio.h>
int main()
{
float a, b;
char Q; // only used for checking the "quit" condition
char input[10]; // assuming 9 characters + terminating byte is enough
scanf("%c", &Q);
if(Q=='Q')
{
printf("quitting program");
return (0);
}
else
{
ungetc(Q, stdin); // return one byte to the input device
scanf( "%s" "%f" "%f", input, &a, &b); // "%s" read from the input as string now
printf("you have chose points: %s %f %f",input, a, b);
}
return 0;
}
#包括
int main()
{
浮子a、b;
char Q;//仅用于检查“退出”条件
字符输入[10];//假设9个字符+终止字节就足够了
scanf(“%c”和“&Q”);
如果(Q=='Q')
{
printf(“退出计划”);
返回(0);
}
其他的
{
ungetc(Q,stdin);//向输入设备返回一个字节
scanf(“%s”“%f”“%f”,input,&a,&b);//“%s”现在以字符串形式从输入中读取
printf(“您选择了点:%s%f%f”,输入,a,b);
}
返回0;
}
什么是重定向输入?抱歉,我对编程非常陌生。字符串以空字符(\0
)结尾。我只是通过填充空字符来初始化字符串。你不需要像我一样初始化数组,但是你必须在字符串的末尾添加空字符。好的,我现在知道了,有没有办法合并多个输入,但是如果按Q,它会退出程序?我尝试了多个if-else语句,do-while,甚至switch-and-break,但对我不起作用。一个程序的流控制在开始时似乎很棘手:/n您可以使用ungetc(Q,stdin)
作为@anatolygOr的答案,您可以输入字符串,然后将该字符串的第一个字符与Q
进行比较。另外,ungetc
很好。一个UV供您使用。%s
->%9s
可防止无效输入上的潜在缓冲区溢出。您还应该测试第一个scanf()
返回1,第二个scanf
返回3。