如何使用 sscanf 输入多个单词?
How to have multiple word input using sscanf?
假设我有:
char string[20][12];
string = "abcde bagfghabc cdfaga dnac eafagac cnaacaacaf"
我想使用 sscanf,使第一个、第三个和第五个单词在一个数组中,其他单词在另一个数组中。所以每2个字。 (12 是最大字长)
我试过
char odd[3][12];
char even[3][12];
int i = 0;
while (i < 3) {
sscanf(string[i], odd[i], even[i]);
i++;
}
非常感谢。
您正在尝试使用 sscanf
解决问题。然而,这个函数需要一个格式字符串作为第二个参数,而你似乎没有传递一个。
此外,在循环中调用 sscanf
时,在每次循环迭代中从字符串的开头开始解析是没有意义的。相反,您想告诉它在已经解析的单词末尾继续解析。因此,您必须引入一个额外的指针变量来跟踪已经解析了多少字符串,并且您必须在每次调用 sscanf
之后推进该指针。为此,使用 sscanf
%n
格式说明符很有用。
这里有一个如上所述的解决方案:
#include <stdio.h>
#define MAX_WORD_PAIRS 3
#define MAX_WORD_SIZE 12
int main( void )
{
char odd[MAX_WORD_PAIRS][MAX_WORD_SIZE];
char even[MAX_WORD_PAIRS][MAX_WORD_SIZE];
char string[] = "word1 word2 word3 word4 word5 word6";
char *p = string;
int num_pairs;
int characters_read;
//attempt to read one pair of words in every loop iteration
for ( num_pairs = 0; num_pairs < MAX_WORD_PAIRS; num_pairs++ )
{
//attempt to read a new pair of words
if ( sscanf( p, "%s%s%n", odd[num_pairs], even[num_pairs], &characters_read ) != 2 )
break;
//advance pointer past the parsed area
p += characters_read;
}
//processing is complete, so we can now print the results
//print odd words
printf( "odd words:\n" );
for ( int i = 0; i < num_pairs; i++ )
{
printf( "%s\n", odd[i] );
}
printf( "\n" );
//print even words
printf( "even words:\n" );
for ( int i = 0; i < num_pairs; i++ )
{
printf( "%s\n", even[i] );
}
}
这个程序有以下输出:
odd words:
word1
word3
word5
even words:
word2
word4
word6
假设我有:
char string[20][12];
string = "abcde bagfghabc cdfaga dnac eafagac cnaacaacaf"
我想使用 sscanf,使第一个、第三个和第五个单词在一个数组中,其他单词在另一个数组中。所以每2个字。 (12 是最大字长) 我试过
char odd[3][12];
char even[3][12];
int i = 0;
while (i < 3) {
sscanf(string[i], odd[i], even[i]);
i++;
}
非常感谢。
您正在尝试使用 sscanf
解决问题。然而,这个函数需要一个格式字符串作为第二个参数,而你似乎没有传递一个。
此外,在循环中调用 sscanf
时,在每次循环迭代中从字符串的开头开始解析是没有意义的。相反,您想告诉它在已经解析的单词末尾继续解析。因此,您必须引入一个额外的指针变量来跟踪已经解析了多少字符串,并且您必须在每次调用 sscanf
之后推进该指针。为此,使用 sscanf
%n
格式说明符很有用。
这里有一个如上所述的解决方案:
#include <stdio.h>
#define MAX_WORD_PAIRS 3
#define MAX_WORD_SIZE 12
int main( void )
{
char odd[MAX_WORD_PAIRS][MAX_WORD_SIZE];
char even[MAX_WORD_PAIRS][MAX_WORD_SIZE];
char string[] = "word1 word2 word3 word4 word5 word6";
char *p = string;
int num_pairs;
int characters_read;
//attempt to read one pair of words in every loop iteration
for ( num_pairs = 0; num_pairs < MAX_WORD_PAIRS; num_pairs++ )
{
//attempt to read a new pair of words
if ( sscanf( p, "%s%s%n", odd[num_pairs], even[num_pairs], &characters_read ) != 2 )
break;
//advance pointer past the parsed area
p += characters_read;
}
//processing is complete, so we can now print the results
//print odd words
printf( "odd words:\n" );
for ( int i = 0; i < num_pairs; i++ )
{
printf( "%s\n", odd[i] );
}
printf( "\n" );
//print even words
printf( "even words:\n" );
for ( int i = 0; i < num_pairs; i++ )
{
printf( "%s\n", even[i] );
}
}
这个程序有以下输出:
odd words:
word1
word3
word5
even words:
word2
word4
word6