#include <stdio.h>
int main( void )
{
char record[] = "john smith 21 VETERAN 1\n";
int n = 0;
for (size_t i = 0; i < 2; i++)
{
const char *p = record + n;
int m;
sscanf( p, "%*s%n", &m );
n += m;
}
printf( "\"%.*s\"\n", n, record );
}
程序输出为
"john smith"
或者你可以把这两个单词组成一串
record[n] = '\0';
printf( "\"%s\"\n", record );
或者如果你的编译器支持可变长度数组,你可以写
#include <string.h>
//...
char name[n + 1];
memcpy( name, record, n );
name[n] = '\0';
printf( "\"%s\"\n", name );
如果编译器不支持可变长度数组,那么你需要动态地分配一个数组,例如
#include <string.h>
#include <stdlib.h>
//...
char *name = malloc( n + 1 );
memcpy( name, record, n );
name[n] = '\0';
printf( "\"%s\"\n", name );
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
//declare the file pointer with the string you intend to read
FILE* file = fopen("info.txt", "r");
//make sure the file exists and is openable
if (file == NULL) {
printf("%s\n", "Unable to open file");
return EXIT_FAILURE;
}
//initialize a character buffer to read the string in the file into
char buffer[50];
//read the line from the file
fgets(buffer, sizeof(buffer), file);
//declare a string array to hold the first two entries of the file
//each name is assumed to have a maximum length of 30 characters
char values[2][30];
//declare an integer var for traversing the array
int index = 0;
//split the input string based on space delimiter
char * token = strtok(buffer, " ");
while (token != NULL && index <2) {
//copy the token to the array
strcpy(values[index], token);
//reset the token
token = strtok(NULL, " ");
//update index for continuous iterations
index++;
}
//use string concat to merge the names in the string array
//declare the final string variable that will hold both names
char final[50];
//copy the first name to this variable
strcpy(final, values[0]);
//append space between the two names
strcat(final, " ");
//append the second name
strcat(final, values[1]);
printf("%s", final);
//outputs john smith
return 0;
}
2条答案
按热度按时间0ve6wy6x1#
对于初学C语言的人来说,这个任务并不容易。
可以有不同的方法。
我可以提出以下方法。
首先,使用标准C函数
fgets
从文件中读取完整记录,例如现在让我们假设已经读取了记录。然后要输出
record
中的前两个单词,您可以使用标准C函数sscanf
,如下面的演示程序所示。程序输出为
或者你可以把这两个单词组成一串
或者如果你的编译器支持可变长度数组,你可以写
如果编译器不支持可变长度数组,那么你需要动态地分配一个数组,例如
在这种情况下,当不再需要分配的内存时,不要忘记释放它
在演示程序中,用作数组
record
的初始化器的字符串字面量被追加了新的行字符'\n'
,因为函数fgets
本身可以将此字符存储在目标数组中。ymdaylpp2#
您可以从文件中读取文本行,然后使用strtok函数根据空格分隔符将读取的文本拆分为令牌,然后将第一个和第二个名称复制到字符串数组中,然后将第一个索引和第二个索引中的值连接起来,以获得名称john smith。查看下面的代码,了解如何在C中实现这一点。