我需要知道如何读取字符串并将其分成两部分,如下例所示。
我在文件@amanda:@bruna 中有这个字符串,但我不能作为单独的单词读取,并且每个都存储在两个不同的变量中,如下所示:
char userA[20];
char userB[20];
scanf("%s:%s", userA, userB);
你能帮助我吗?
使用扫描集来防止第一次%s
消耗整行,因为它%s
只会在遇到空格时停止消耗:
if (scanf("%19[^:]:%19s", userA, userB) == 2)
{
/* 'userA' and 'userB' have been successfully assigned. */
}
where%19[^:]
表示最多读取 19 个字符,但在遇到冒号时停止。指定宽度可防止缓冲区溢出。始终检查scanf()
返回赋值数的结果,以确保后续代码不会处理陈旧或未初始化的变量。
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);
没有必要使用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';