尝试在循环中使用scanf扫描值。需要辅助输入来打印第一个输入
我在使用scanf时遇到了麻烦(在别人提到它之前,我必须使用它。我不能使用尝试在循环中使用scanf扫描值。需要辅助输入来打印第一个输入,c,while-loop,user-input,scanf,C,While Loop,User Input,Scanf,我在使用scanf时遇到了麻烦(在别人提到它之前,我必须使用它。我不能使用getchar(),fgets(),以及其他各种东西)。在下面的代码中,我需要加(或减)两个实数或整数,并将总和存储到内存中。我想我可以自己整理内存,但问题是打印总和的结果 我必须键入“6+6”,按enter键,然后输入另一个字符以显示原始总和。此外,如果我键入“6+6+”,程序将运行,我希望它运行 我想我犯了一个非常基本的错误。我很累 #include <stdio.h> #include <stdli
getchar()
,fgets()
,以及其他各种东西)。在下面的代码中,我需要加(或减)两个实数或整数,并将总和存储到内存中。我想我可以自己整理内存,但问题是打印总和的结果
我必须键入“6+6”,按enter键,然后输入另一个字符以显示原始总和。此外,如果我键入“6+6+”,程序将运行,我希望它运行
我想我犯了一个非常基本的错误。我很累
#include <stdio.h>
#include <stdlib.h>
int main(){
char memoryExitSwitch[256];
int q =1;
double operandOneHalf;
double operandTwo;
double result = 0.0;
while(q == 1){
scanf("%lf" "%lf ", &operandOneHalf, &operandTwo);
scanf( " %s", memoryExitSwitch);
switch (memoryExitSwitch[0]) {
case 'p':
result = memoryExitSwitch[1] + operandTwo;
printf("ANS1= %lf\n", result);
memoryExitSwitch[1] = result;
break;
case 'q':
q = 0;
break;
default:
result = operandOneHalf + operandTwo;
printf("ANS2= %lf\n", result);
memoryExitSwitch[1] = result;
break;
}//switch
}//main while loop q
return 0;
}
#包括
#包括
int main(){
char memoryExit开关[256];
int q=1;
双操作数半;
双操作数2;
双结果=0.0;
而(q==1){
scanf(“%lf”%lf“,&operanonehalf,&operandotwo);
scanf(“%s”,MemoryExit开关);
开关(MemoryExit开关[0]){
案例“p”:
结果=MemoryExit开关[1]+操作数2;
printf(“ANS1=%lf\n”,结果);
MemoryExit开关[1]=结果;
打破
案例‘q’:
q=0;
打破
违约:
结果=操作数一半+操作数二;
printf(“ANS2=%lf\n”,结果);
MemoryExit开关[1]=结果;
打破
}//开关
}//主回路q
返回0;
}
由于第二个%lf
后面的尾随空格,您的程序将在第二个数字后面等待一个非空白字符:
scanf("%lf" "%lf ", &operandOneHalf, &operandTwo);
…如果您解决了这个问题,它仍将等待在两个数字之后输入一个非空白字符串,因为下面调用了scanf()
:
您的程序在第二个数字后等待一个非空白字符,因为第二个
%lf
后面有尾随空格:
scanf("%lf" "%lf ", &operandOneHalf, &operandTwo);
…如果您解决了这个问题,它仍将等待在两个数字之后输入一个非空白字符串,因为下面调用了scanf()
:
各种问题
“%lf”
强制scanf()
检测数字后面的非空白,延迟scanf()
返回。“
表示使用所有可选的下列空白scanf()
需要查看一些非空白,才能知道它已看到以下所有空白
// scanf("%lf" "%lf ", &operandOneHalf, &operandTwo);
// v--- no space
if (scanf("%lf" "%lf", &operandOneHalf, &operandTwo) != 2) return -1;
char memoryExitSwitch[256];
// scanf( " %s", memoryExitSwitch);
// v ---- space not needed
// |255 - lit input to 1 less than buffer size
// | | v--- Check result
if (scanf( "%255s", memoryExitSwitch) != 1) return -1;
“%lf”
强制scanf()
检测数字后面的非空白,延迟scanf()
返回。“
表示使用所有可选的下列空白scanf()
需要查看一些非空白,才能知道它已看到以下所有空白
// scanf("%lf" "%lf ", &operandOneHalf, &operandTwo);
// v--- no space
if (scanf("%lf" "%lf", &operandOneHalf, &operandTwo) != 2) return -1;
char memoryExitSwitch[256];
// scanf( " %s", memoryExitSwitch);
// v ---- space not needed
// |255 - lit input to 1 less than buffer size
// | | v--- Check result
if (scanf( "%255s", memoryExitSwitch) != 1) return -1;
您是否尝试在switch语句之前打印出
memoryExitSwitch
?在第一个svanf()
的格式字符串中有一个尾随空格;这是个大问题。直到您键入一个非空值,它才会停止。您是否尝试过在switch语句之前打印出memoryExitSwitch
?在第一个svanf()的格式字符串中有一个尾随空格;这是个大问题。它不会停止,直到你键入一个非空的;另一个是问题所在。“您的程序等待非空白字符串”-->scanf(“%s”,memoryExitSwitch)代码>与scanf(“%s”,memoryExit开关)具有相同的效果代码>@JonathanLeffler:他们两个都是问题所在。如果%lf
后面的空格是固定的,那么下面的scanf()
仍然会等待字符串满足%s
@chux:Yes,并且它们都会等待一些非空白满足%s
。实际上,不是。这是第一个主要问题。直到用户键入一些非空白字符,它才会完成。是的,在结束第一次输入的字符后还必须有某种形式的空格(例如换行符),但主要问题仍然是第一个scanf()
。你可以输入任意多的换行、制表符和空格,但第一个仍然没有完成;另一个是问题所在。“您的程序等待非空白字符串”-->scanf(“%s”,memoryExitSwitch)代码>与scanf(“%s”,memoryExit开关)具有相同的效果代码>@JonathanLeffler:他们两个都是问题所在。如果%lf
后面的空格是固定的,那么下面的scanf()
仍然会等待字符串满足%s
@chux:Yes,并且它们都会等待一些非空白满足%s
。实际上,不是。这是第一个主要问题。直到用户键入一些非空白字符,它才会完成。是的,在结束第一次输入的字符后还必须有某种形式的空格(例如换行符),但主要问题仍然是第一个scanf()
。您可以键入任意多的换行符、制表符和空格,但第一个仍然没有完成。