【问题标题】:scanf does not work in batch mode programmingscanf 在批处理模式编程中不起作用
【发布时间】:2021-12-28 06:44:54
【问题描述】:

我的代码遇到问题,当我尝试在 linux 终端中以此处所示的交互模式执行时,它工作得非常好 enter image description here

但是当尝试以批处理模式执行时,我从程序中得到了一个意外的行为,我不知道它到底是不是像这样的地址 enter image description here

mydata.txt 分别包含 7 2 作为和 b 的值

#include<stdio.h>

int main(void){
    int a, b;
    printf("Enter Value of a, b ");
    scanf("%d %d", &a , &b);

  
    int temp = a;
    a = b;
    b = temp;
  
    printf("\nAfter Swapping: a = %d, b = %d\n", a, b);
    return (0);

}

【问题讨论】:

  • 您没有检查scanf 的返回值,因此您不知道在例如之前是否将值分配给ab输入流的 EOF。
  • 您的 mydata.txt 文件是否以行尾结尾?
  • 请不要张贴错误截图,复制粘贴为文本。你的输入文件包含什么?使用cat yourfile 将其转储到屏幕上。
  • Microsoft 曾经将实际字符 0x1A 作为文本文件的文件结束标记,但现在通常没有这样的东西。 C 函数返回的EOF 是一个标志,而不是实际数据。在文本编辑器中打开您的文本文件mydata.txt,然后将其内容复制/粘贴到问题中。此外,使用字节查看器检查您的文件,看看是否有任何意外的流氓非打印字符。
  • 根据定义,您的文件以文件结尾结束。

标签: c linux


【解决方案1】:

我在使用带有字节顺序标记 (BOM) 的 UTF-8 文件时遇到了这个问题:

$ cat mydata.txt 
7 2
$ hexdump mydata.txt 
0000000 2037 0a32                              
0000004
$ ./a.out < mydata.txt 
Enter Value of a, b 
After Swapping: a = 2, b = 7
$ uconv -f utf-8 -t utf-8 --add-signature -o mydata_sig.txt mydata.txt
$ cat mydata_sig.txt
7 2
$ hexdump mydata_sig.txt 
0000000 bbef 37bf 3220 000a                    
0000007
$ ./a.out < mydata_sig.txt
Enter Value of a, b 
After Swapping: a = 32765, b = 0

我认为对您的输入文件进行十六进制转储以查看其中是否有任何奇怪的字符会很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-10
    • 1970-01-01
    • 1970-01-01
    • 2011-08-03
    • 2021-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多