gpt4 book ai didi

c - 为什么在扫描文件时无法从 scanf(c Linux vi) 获取正确的字符值?

转载 作者:太空宇宙 更新时间:2023-11-04 08:36:05 25 4
gpt4 key购买 nike

这是我的文件内容

2
00000100+10000001

基本上我想做的是将 2 作为 int 读取,将后面的两个 0 作为 char 读取。我的代码是(会复制和粘贴但不知道如何从 vi 到记事本,试过(https://stackoverflow.com/questions/26173704/how-to-copy-and-paste-to-another-application-from-linux-shellvim)

代码:

int main(void)
{
int times;
scanf("%d",&times);
printf("Number of times=%d ",times);
char num1;
scanf("%c",&num1);
char num2;
scanf("%c",&num2);
int n = num1=='0'?0:1;
int n2 = num2 == '0'?0:1;
printf("The next two digits are %d and %d\n",n,n2);
return 0;
}

程序编译良好,我能够从 gcc 创建可执行文件。我从运行这个程序并将标准输入重定向到文件得到的输出是带有可执行文件的第一个文件重定向命令

$ ./a.out < input.txt

结果:

Number of times=2 The next two digits are 1 and 0

两者打印正确。我不明白为什么下一个数字是一个。根据我的理解,scanf 不会看到下一个字符是“0”,还是有其他东西阻止了它?它最终确实到达了我希望它到达的正确字符,“0”。有谁知道为什么要输出 1 。从我的编码方式来看(我知道这是糟糕的设计),任何不是“0”的字符都会将相应的 int 设置为 1。我只想知道是什么元素导致了这个问题的发生以及如何避免这个问题。

最佳答案

你可能不认识它,但换行符一个字符。
所以 num1 变为 '\n' 并且因为您的测试 (num1 == '0') 不检查空格 n 变成 1 ..

您可以通过在 scanf 中为 %c 添加一个空格来避免这种情况。这将强制 scanf 忽略空格

关于c - 为什么在扫描文件时无法从 scanf(c Linux vi) 获取正确的字符值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26175781/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com