C 扫描Y/N并保存以备将来使用

C 扫描Y/N并保存以备将来使用,c,char,C,Char,我想问一个特定的问题,并得到用户读入的是/否答案。我最终需要使用字符Y或N来更改下一个问题的结果,这就是为什么我需要保存该字符以便以后检索它。我不想使用字符串或for/while循环。另外,为什么我需要在“%c*”之后包含* #包括 #包括 int main() { int avgTemp,最低温度,温度; char choice='Y'; char decision='N'; printf(“平均温度是多少?\n”); scanf(“%d”和avgTemp); printf(“过去24小时的最

我想问一个特定的问题,并得到用户读入的是/否答案。我最终需要使用字符Y或N来更改下一个问题的结果,这就是为什么我需要保存该字符以便以后检索它。我不想使用字符串或for/while循环。另外,为什么我需要在“%c*”之后包含*

#包括
#包括
int main()
{
int avgTemp,最低温度,温度;
char choice='Y';
char decision='N';
printf(“平均温度是多少?\n”);
scanf(“%d”和avgTemp);
printf(“过去24小时的最低温度是多少?\n”);
scanf(“%d”和最低温度);
printf(“温度超过99华氏度超过30分钟了吗?
请回答Y表示是,N表示否。\N“;
scanf(“%c*”,&choice);
printf(“选择是%c”,选择);
返回0;
}
另外,为什么我需要在“%c*”之后包含*


%c*
表示先扫描一个字符,然后再扫描一个
*
(它将丢弃该字符)。也许您的意思是
%*c
,这意味着执行扫描但放弃它。你不需要他们中的任何一个

scanf
是一个非常有问题的函数,应该避免使用。你的程序说明了这个问题
scanf
不读取整行
scanf
将仅扫描stdin,直到达到您要求的标准,然后停止。这意味着,有时会在输入流上留下额外的输入和换行符,以供下一个毫无防备的
scanf
使用。从手册页

每个连续指针参数必须与每个 连续转换说明符(但请参见下面的*转换)。全部的 转换由%(百分号)字符引入。格式字符串还可能包含其他字符。格式字符串中的空白(如空格、制表符或换行符)与任何 输入中的空白量,包括无空白。其他一切都只匹配 它本身当输入字符与这种格式字符不匹配时,扫描停止。当无法进行输入转换时,扫描也会停止(见下文)

这使得不小心在输入缓冲区上留下字符非常容易。您的每个
scanf(“%d”)
都将读入号码并停止。这会在输入缓冲区上留下一个换行符。这对于
%d
很好,因为

在转换开始之前,大多数转换跳过空白

…但不适用于
%c

匹配宽度计数字符序列(默认为1);下一个指针必须是指向char的指针,并且必须有足够的空间容纳所有字符(不添加终止NUL)通常的前导空白跳过被抑制。要先跳过空白,请在格式中使用显式空格。

因此,您需要
scanf(“%c”)
才能使其正常工作


scanf
必须避免,因为它非常、非常容易受到意外输入的影响。试着给第一个问题加上“foo”。所有的
scanf(“%d”)
将自动失败。而
scanf(“%c”)
将读取
f

相反,请使用(最好是它为您处理内存分配)或
fgets
读取整行,然后在生成的字符串上使用
sscanf
。这避免了上述所有问题

另外,为什么我需要在“%c*”之后包含*


%c*
表示先扫描一个字符,然后再扫描一个
*
(它将丢弃该字符)。也许您的意思是
%*c
,这意味着执行扫描但放弃它。你不需要他们中的任何一个

scanf
是一个非常有问题的函数,应该避免使用。你的程序说明了这个问题
scanf
不读取整行
scanf
将仅扫描stdin,直到达到您要求的标准,然后停止。这意味着,有时会在输入流上留下额外的输入和换行符,以供下一个毫无防备的
scanf
使用。从手册页

每个连续指针参数必须与每个 连续转换说明符(但请参见下面的*转换)。全部的 转换由%(百分号)字符引入。格式字符串还可能包含其他字符。格式字符串中的空白(如空格、制表符或换行符)与任何 输入中的空白量,包括无空白。其他一切都只匹配 它本身当输入字符与这种格式字符不匹配时,扫描停止。当无法进行输入转换时,扫描也会停止(见下文)

这使得不小心在输入缓冲区上留下字符非常容易。您的每个
scanf(“%d”)
都将读入号码并停止。这会在输入缓冲区上留下一个换行符。这对于
%d
很好,因为

在转换开始之前,大多数转换跳过空白

…但不适用于
%c

匹配宽度计数字符序列(默认为1);下一个指针必须是指向char的指针,并且必须有足够的空间容纳所有字符(不添加终止NUL)通常的前导空白跳过被抑制。要先跳过空白,请在格式中使用显式空格。

因此,您需要
scanf(“%c”)
才能使其正常工作


scanf
必须避免,因为它非常、非常容易受到意外输入的影响。试着给第一个问题加上“foo”。所有的
scanf(“%d”)
将自动失败。而
scanf(“%c”)
将读取
f


相反,请使用(最好是它为您处理内存分配)或
fgets
读取整行,然后在生成的字符串上使用
sscanf
。这避免了上述所有问题。

当您说“保存以稍后检索”时,是指持久性吗?您可以将字符写入文本文件,只要应用程序需要知道以前的值,就可以读取该文本文件
#include <stdio.h>
#include <stdlib.h>

int main ()
{
int avgTemp, lowestTemp, temperature;
char choice ='Y';
char decision ='N';
printf("What is the average temperature?\n");
    scanf("%d", &avgTemp);

printf("What is the lowest temperature in last 24 hours?\n");
    scanf("%d", &lowestTemp);

printf("Has the temperature been over 99 degrees F for more than 30 minutes?
        Please answer Y for yes and N for no.\n");
    scanf("%c*", &choice);

printf("choice is %c", choice);

return 0;
}