如何读取c中用“:”分隔的两个字符串

时间:2013-02-28 20:49:22

标签: c string file scanf

我需要知道如何读取字符串并分成两部分,如下例所示。

我在@amanda文件中有这个字符串:@bruna,但我不能读作单独的单词,而且每个商店都有两个不同的变量,如下所示:

char userA[20];
char userB[20];
scanf("%s:%s", userA, userB);

你能帮助我吗?

3 个答案:

答案 0 :(得分:7)

使用扫描集阻止第一个%s消耗整行,因为%s只会在遇到空格时停止使用:

if (scanf("%19[^:]:%19s", userA, userB) == 2)
{
    /* 'userA' and 'userB' have been successfully assigned. */
}

其中%19[^:]表示最多可读取19个字符,但遇到冒号时会停止。指定宽度预先缓冲区溢出。始终检查scanf()的结果,该结果返回所做的分配数,以确保后续代码不处理陈旧或未初始化的变量。

答案 1 :(得分:1)

char buf[60];
char userA[20];
char userB[20];
char *ptr;

scanf("%s", buf);
ptr = strchr(buf, ':');
if (ptr == NULL)
{
  // whatever you want to do if there's no ':'
}
*ptr = 0;
strcpy(userA, buf);
strpcy(userB, ptr + 1);

答案 2 :(得分:0)

无需使用scanf。 (事实上​​,在大学课程之外,scanf几乎没有任何目的)。只需阅读数据:

int main( void )
{
  char line[ 80 ];
  char *userA, *userB;
  fgets( line, sizeof line, stdin );  /* Need to check that a full line was read */
  userA = line;
  userB = strchr( line, ':' );  /* Need to check that the input contains a colon */
  *userB++ = '\0';
相关问题