c - 在 C 中使用 scanf("%19[^\n]",Input) 时出现问题
问题描述
所以基本上当我使用 scanf("%19[^\n]", Input); 我的输出有问题。
#include <stdio.h>
#include <stdlib.h>
void inputTime();
int main()
{
int test = 0;
do
{
inputTime();
test++;
} while (test!=2);
return 0;
}
void inputTime()
{
char Input[20];
printf("Test : ");
*Input = '\0';
scanf("%19[^\n]", Input);
}
在我的 char[] 的第一次输入之后,程序和 [^\n] 不能让我输出两次。这是我在输出中得到的:
测试:SomeString 测试://无法输入第二个字符串 进程返回 0 (0x0) 执行时间:11.599 s 按任意键继续。
但是,如果我将 scanf("%19[^\n]", Input) 更改为 scanf("%19s", Input) 它可以正常工作
测试:SomeString Test : AnotherString //现在可以在这里写了 进程返回 0 (0x0) 执行时间:11.599 s 按任意键继续。
使用 scanf("%19[^\n]", Input) 时如何获得相同的结果?
解决方案
“在我的 char[] 的第一次输入之后,程序和 [^\n] 不能让我输出两次。但是,如果我改成
scanf("%19[^\n]", Input)
它scanf("%19s", Input)
可以正常工作。 ”
这是因为%[
转换说明符在:
scanf("%19[^\n]", Input);
与转换说明符相反%s
,不会跳过前导空白字符,例如在循环的上一次迭代中从上一次调用中\n
按Return
向左输入的(换行符) 。stdin
main
在之前添加一个空格字符指令%[
:
scanf(" %19[^\n]", Input);
getchar()
或者在捕捉左边之前插入一个呼叫newline
。
推荐阅读
- python - 在 Django 中使用 Celery Task 创建对象(在 ViewSet 类中)
- typescript - 通过打字稿中的动态键字符串访问反应原生样式表成员
- c - CS50 Speller.c 问题
- kubernetes - kubectl apply 与 kubernetes 部署 - Terraform
- ubuntu - 是否有一个快速脚本可以将文件夹中的 JPG 重命名为其 HSL 值
- amazon-web-services - 视频点播的 Cloudfront 存储桶策略
- angular - “DialogRef”类型上不存在属性“then”
'.ts(2339) - java - Swing 和 Javafx 之间的互操作性:从嵌入式 Swing 应用程序关闭父 Javafx 阶段
- azure - 入站和出站规则混淆 Azure
- kotlin - Ktor HttpClient 支持分块传输编码