【问题标题】:Best way format user input before storing it (C)?在存储之前格式化用户输入的最佳方式(C)?
【发布时间】:2018-08-10 08:53:49
【问题描述】:

所以我对 C 非常陌生,我正在编写一个程序,该程序接受用户输入并将其分成两部分,即

>char beforeColon;
>char afterColon[35];
>user enters: "u:some stuff"
>beforeColon = 'u'
>afterColon = "some stuff"

基本上,我想将u 存储在一个char 变量中,将some stuff 存储在char 数组中,但到目前为止,我只能通过为@987654326 使用char 数组来实现它@也一样。我还想知道如果我将 beforeColon 更改为 int 是否会起作用,这样我就可以获取用户输入的 char 的 ASCII。

这是我的代码:

#include <stdio.h>

int main(void)
{
    char afterColon[35];
    char  beforeColon[2];
    int ASCII_of_bc;
    scanf("%1s:%[^\n]s", beforeColon, afterColon);
    ASCII_of_bc = beforeColon[0];
}

【问题讨论】:

  • 你想达到什么目的?
  • "%1s" 将读取一个字符串,即附加一个空字符。因此beforeColon 变为['u', '\0']。改为读取单个字符:“%c”。
  • 最后的s"%1s:%[^\n]s" 中毫无用处。最好加上宽度限制 --> "%1s:%34[^\n]"

标签: c scanf


【解决方案1】:

您可以使用strtok()函数:

char user_enters[13]= "u:some stuff";
char *ret_pointer=NULL;

ret_pointer = strtok(user_enters, ":");

if(ret_pointer){    
    //Get the beforeColon character set <ret_pointer>
}
ret_pointer = strtok(NULL, ":");  

if(ret_pointer){
    //Get the afterColon character set <ret_pointer>
} 

【讨论】:

  • 好奇:为什么要初始化char *ret_pointer=NULL;,然后马上赋值呢?将char *ret_pointer = strtok(user_enters, ":"); 视为一种简洁的替代方案。
  • 是的,你可以做到。据我所知,单独声明变量不是强制性的。但我认为它更具可读性。
【解决方案2】:
#include <stdio.h>

int main(void)
{
    char afterColon[35];
    char beforeColon;
    int ASCII_of_bc;

    scanf("%c:%s", &beforeColon, afterColon);
    ASCII_of_bc = (int) beforeColon;
}

参考:

  1. http://www.cplusplus.com/reference/cstdio/scanf/

【讨论】:

    猜你喜欢
    • 2017-07-15
    • 1970-01-01
    • 2013-09-10
    • 2011-04-10
    • 2016-12-23
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多