arrays - 如何在c中将char数组拆分为两种不同的类型?
问题描述
所以,我需要使用标准输入来读取一个有两列的文件,第一列是字符,第二列是整数。
输入文件是这样的:
i 10
i 20
i 30
i 40
i 50
i 45
r 48
我的代码目前:
int main(){
char line[MAX];
int n = 0;
while(fgets(line, MAX, stdin)){
printf("string is: %s\n",line);
}
return 0;
输出结果为:
string is: i 10
string is: i 20
string is: i 30
string is: i 40
string is: i 50
string is: i 45
string is: r 48
所以,我现在需要做的是用第一列分配一个char数组,用第二列分配一个整数数组。比如int V[size] = [10,20,30,40,50,45,48] 和char W[size] = [i,i,i,i,i,i,r]。我怎样才能做到这一点?
解决方案
用于sscanf()
解析字符串并提取所需的数据。
#include <stdio.h>
#include <stdlib.h>
#define MAX 500
int main(void)
{
int num[MAX] = {0}, lines = 0;
char line[MAX] = {0}, sym[MAX] = {0};
while (fgets(line, MAX, stdin))
{
if (lines >= MAX) /* alternative check comments */
{
fprintf(stderr, "arrays full\n");
break; /* break or exit */
}
if (sscanf(line, "%c %d", &sym[lines], &num[lines]) != 2) /* check return value for input error */
{
/* handle error */
exit(EXIT_FAILURE);
}
lines++;
}
for (int i = 0; i < lines; i++)
{
printf("char: %c | num: %d\n", sym[i], num[i]);
}
exit(EXIT_SUCCESS);
}
您还可以使用feof()
andferror()
来确定是否fgets()
失败或您达到了EOF。
推荐阅读
- sql - 在 Vertica 中使用数组数据类型
- javascript - Flask:通过 render_template() 传递多个基于 python 的变量
- c# - Selenium + C# + Chrome WebDriver:违反 CSP
- hybris - 如何覆盖 Backoffice PCM 中的按钮标签?
- sql - SQL如何在列与行中加入多个选择
- windows-10 - 为什么 p4v 为每个差异打开一个新窗口?
- unity3d - 如何在开始游戏之前加载音频剪辑并获取整首歌曲的频谱数据
- lua - 暂停功能并稍后在没有协程的情况下恢复
- php - 是否可以在刀片视图中使用 groupBy 在 laravel 中进行分页?
- docker - HOSTNAME_COMMAND 如何在 wurstmeister/kafka-docker 上工作