发布
社区首页 >问答首页 >扫描Y/N并保存以备将来使用

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

Stack Overflow用户
提问于 2016-06-04 06:54:09
回答 1查看 511关注 0票数 0

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

代码语言:javascript
代码运行次数:0
复制
#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;
}
EN

回答 1

Stack Overflow用户

发布于 2016-06-04 07:42:20

还有,为什么我需要在"%c*“后面加上*?

%c*意味着先扫描一个字符,然后再扫描一个* (它将丢弃该字符)。也许你指的是%*c,意思是做扫描,但丢弃它。你不需要它们中的任何一个。

scanf是一个非常有问题的函数,应该避免使用。你的程序说明了这个问题。scanf不会读取整行内容。scanf将只扫描标准输入,直到您请求的内容,然后停止。这意味着额外的输入和换行符有时可以留在输入流中,用于下一个不可信的scanf。从手册页...

每个连续的指针参数必须与每个连续的转换说明符正确对应(但请参阅下面的*转换)。所有转换都由%(百分号)字符引入。格式字符串还可以包含其他字符。格式字符串中的空格(如空格、制表符或换行符)可匹配输入中的任意数量的空格,包括无空格。其他所有东西都只与它自己匹配。当输入字符与此类格式字符不匹配时,扫描停止。当无法进行输入转换时,扫描也会停止(见下文)。

这使得意外地将字符留在输入缓冲区变得非常容易。你的每一个scanf("%d")都会读入这个数字并停止。这会在输入缓冲区上留下一个换行符。这对%d来说很好,因为..。

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

不适用于%c的...but。

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

所以你需要scanf(" %c")来让它工作。

应该避免使用scanf,因为它非常容易受到意外输入的影响。试着给第一个问题加上"foo“。所有scanf("%d")都将静默失败。scanf("%c")将读取f

取而代之的是,使用getline (首选,因为它为您处理内存分配)或fgets读取整行代码,然后对结果字符串使用sscanf。这就避免了上述所有问题。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37624553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档