标签: scanf

为什么每次在C中都必须指定数据类型?

从下面的代码片段中可以看出,我已经声明了一个char变量和一个int变量.当代码被编译,就必须确定变量的数据类型stri.

为什么我需要扫描我的变量,它是通过指定的字符串或整型变量时再次告诉%s%dscanf?当我声明我的变量时,编译器是否足够成熟以确定?

#include <stdio.h>

int main ()
{
  char str [80];
  int i;

  printf ("Enter your family name: ");
  scanf ("%s",str);  
  printf ("Enter your age: ");
  scanf ("%d",&i);

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

c compiler-construction printf scanf

66
推荐指数
6
解决办法
4833
查看次数

将字符串转换为整数的sscanf或atoi有什么区别?

gcc 4.4.4 c89

将字符串转换为整数值更好.

我尝试了两种不同的方法atoi和sscanf.两者都按预期工作.

char digits[3] = "34";
int device_num = 0;

if(sscanf(digits, "%d", &device_num) == EOF) {
    fprintf(stderr, "WARNING: Incorrect value for device\n");
    return FALSE;
}
Run Code Online (Sandbox Code Playgroud)

或使用atoi

device_num = atoi(digits);
Run Code Online (Sandbox Code Playgroud)

我认为sscanf会更好,因为你可以检查错误.但是,atoi没有做任何检查.

c scanf atoi

64
推荐指数
2
解决办法
12万
查看次数

Python中的sscanf

我正在寻找与sscanf()Python 相当的东西.我想解析/proc/net/*文件,在CI中可以做这样的事情:

int matches = sscanf(
        buffer,
        "%*d: %64[0-9A-Fa-f]:%X %64[0-9A-Fa-f]:%X %*X %*X:%*X %*X:%*X %*X %*d %*d %ld %*512s\n",
        local_addr, &local_port, rem_addr, &rem_port, &inode);
Run Code Online (Sandbox Code Playgroud)

我首先想到的是str.split,但是它不会拆分给定的字符,而是整个sep字符串:

>>> lines = open("/proc/net/dev").readlines()
>>> for l in lines[2:]:
>>>     cols = l.split(string.whitespace + ":")
>>>     print len(cols)
1
Run Code Online (Sandbox Code Playgroud)

如上所述,应该返回17.

是否有一个等价于sscanf(不是RE)的Python ,或者标准库中的字符串拆分函数,它分裂了我不知道的任何一系列字符?

python parsing split scanf procfs

59
推荐指数
5
解决办法
11万
查看次数

scanf的缺点

我想知道它的缺点scanf().

在许多站点中,我已经读过使用scanf可能导致缓冲区溢出.这是什么原因?还有其他缺点scanf吗?

c user-input input scanf

58
推荐指数
6
解决办法
5万
查看次数

如何读取未知长度的输入字符串?

如果我不知道这个词有多长,我就不会写char m[6];,
这个词的长度可能是十到二十个.如何使用scanf键盘输入?

#include <stdio.h>
int main(void)
{
    char  m[6];
    printf("please input a string with length=5\n");
    scanf("%s",&m);
    printf("this is the string: %s\n", m);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

请输入一个lenght = 5 的字符串
你好
这是字符串:hello

c scanf

57
推荐指数
5
解决办法
13万
查看次数

uint8_t,uint16_t,...的格式说明符?

如果我有一个整数变量,我可以使用sscanf格式说明符%d,如下所示.

sscanf (line, "Value of integer: %d\n", &my_integer);
Run Code Online (Sandbox Code Playgroud)

我在哪里可以找到格式说明uint8_t,uint16_t,uint32_tuint64_t

uint64_t可能有%lu.

c++ scanf c++11

54
推荐指数
2
解决办法
7万
查看次数

在C中逐行浏览文本文件

我一直在为我的CIS类做一个小练习,并且我对C用于从文件中读取的方法感到困惑.我真正需要做的就是逐行读取文件并使用从每行收集的信息进行一些操作.我尝试使用getline方法和其他没有运气的方法.我的代码目前如下:

int main(char *argc, char* argv[]){
      const char *filename = argv[0];
      FILE *file = fopen(filename, "r");
      char *line = NULL;

      while(!feof(file)){
        sscanf(line, filename, "%s");
        printf("%s\n", line);
      }
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

现在我用sscanf方法得到一个seg错误,我不知道为什么.我是一名C总裁,只是想知道是否有一些我失踪的大事.谢谢

c scanf getline

54
推荐指数
4
解决办法
28万
查看次数

如何使用C从键盘读取字符串?

我想读取用户输入的字符串.我不知道字符串的长度.由于CI中没有字符串声明指针:

char * word;
Run Code Online (Sandbox Code Playgroud)

并用于scanf从键盘读取输入:

scanf("%s" , word) ;
Run Code Online (Sandbox Code Playgroud)

但是我遇到了分段错误.

当长度未知时,如何从C中读取键盘输入?

c string scanf

51
推荐指数
3
解决办法
25万
查看次数

为什么scanf()会在此代码中导致无限循环?

我有一个小的C程序,它只是从stdin读取数字,每个循环周期一个.如果用户输入了一些NaN,则应该向控制台输出错误,输入提示应该再次返回.输入"0"时,循环应该结束,给定的正/负值的数量应该打印到控制台.这是程序:

#include <stdio.h>

int main()
{
    int number, p = 0, n = 0;

    while (1) {
        printf("-> ");
        if (scanf("%d", &number) == 0) {
            printf("Err...\n");
            continue;
        }

        if (number > 0) p++;
        else if (number < 0) n++;
        else break; /* 0 given */
    }

    printf("Read %d positive and %d negative numbers\n", p, n);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,在输入一些非数字(如"a")时,这会导致无限循环一遍又一遍地写" - > Err ...".我想这是一个scanf()问题,我知道这个函数可以被更安全的替换,但这个例子适用于初学者,只知道printf/scanf,if-else和循环.

我已经阅读了这个问题的答案并浏览了其他问题,但没有真正回答这个具体问题.

c gcc scanf

45
推荐指数
3
解决办法
5万
查看次数

sscanf("123456789123456789123456789","%d"和&n)是否定义了行为?

sscanf()scanf族或该族的另一个函数被赋予一个数字序列时,其转换值超过目标整数类型的最大值,

  • 是否应该认为转换失败了?
  • 是根本定义的行为?

c scanf undefined-behavior

45
推荐指数
1
解决办法
1931
查看次数