如何在C中读取数字到字符串直到行尾
How to read number to string till end of the line in C
我有一个这样的输入文件
10 25 4 3 86 1 23 20 14 1 3 7 3 16 7
2
第一行:数字数组。
第2行:一个整数k。
我尝试 fgets() 阅读它们,但它不起作用。这是我的代码:
int main(){
FILE *input = fopen("Input7.txt","r");
int a[2000],k;
fgets(a,2000,input);
fscanf(input,"%d",&k);
fclose(input);
int i,n;
n = 15; //My example array have 15 numbers
for (i=1;i<=n;++i){
printf("%d ",a[i]);
}
return 0;
}
我读完后打印了数组 a 但这是我得到的
Photo links
我该如何解决这个问题?顺便说一句,我想计算我读入数组的数量。感谢您的帮助。
您必须将 a
数组的类型更改为 char
,因为 fgets
等待 char*
作为第一个参数。
下一个重要的事情是 fgets
将字符读入指定的 char
数组而不是直接读取数字,您必须将读取的字符序列标记化并将每个标记转换为整数。您可以使用 strtok
函数标记 a
数组。
#include <stdio.h> // for fgets, printf, etc.
#include <string.h> // for strtok
#define BUFFER_SIZE 200
int main() {
FILE* input = fopen("Input7.txt", "r");
char a[BUFFER_SIZE] = { 0 };
char* a_ptr;
int k, i = 0, j;
int n[BUFFER_SIZE] = { 0 };
fgets(a, BUFFER_SIZE, input); // reading the first line from file
fscanf(input, "%d", &k);
a_ptr = strtok(a, " "); // tokenizing and reading the first token
while(a_ptr != NULL) {
n[i++] = atoi(a_ptr); // converting next token to 'int'
a_ptr = strtok (NULL, " "); // reading next token
}
for(j = 0; j < i; ++j) // the 'i' can tell you how much numbers you have
printf(j ? ", %d" : "%d", n[j]);
printf("\n");
fclose(input);
return 0;
}
忽略行的事情...
继续阅读数字直到 EOF
int array[1000];
int k = 0;
int prev, last;
if (scanf("%d", &prev) != 1) /* error */;
while (scanf("%d", &last) == 1) {
array[k++] = prev;
prev = last;
}
// array has the k numbers in the first line
// prev has the single number in the last line
如果需要,可以使用 malloc()
、realloc()
和 free()
使数组动态化。
我有一个这样的输入文件
10 25 4 3 86 1 23 20 14 1 3 7 3 16 7
2
第一行:数字数组。
第2行:一个整数k。
我尝试 fgets() 阅读它们,但它不起作用。这是我的代码:
int main(){
FILE *input = fopen("Input7.txt","r");
int a[2000],k;
fgets(a,2000,input);
fscanf(input,"%d",&k);
fclose(input);
int i,n;
n = 15; //My example array have 15 numbers
for (i=1;i<=n;++i){
printf("%d ",a[i]);
}
return 0;
}
我读完后打印了数组 a 但这是我得到的 Photo links
我该如何解决这个问题?顺便说一句,我想计算我读入数组的数量。感谢您的帮助。
您必须将 a
数组的类型更改为 char
,因为 fgets
等待 char*
作为第一个参数。
下一个重要的事情是 fgets
将字符读入指定的 char
数组而不是直接读取数字,您必须将读取的字符序列标记化并将每个标记转换为整数。您可以使用 strtok
函数标记 a
数组。
#include <stdio.h> // for fgets, printf, etc.
#include <string.h> // for strtok
#define BUFFER_SIZE 200
int main() {
FILE* input = fopen("Input7.txt", "r");
char a[BUFFER_SIZE] = { 0 };
char* a_ptr;
int k, i = 0, j;
int n[BUFFER_SIZE] = { 0 };
fgets(a, BUFFER_SIZE, input); // reading the first line from file
fscanf(input, "%d", &k);
a_ptr = strtok(a, " "); // tokenizing and reading the first token
while(a_ptr != NULL) {
n[i++] = atoi(a_ptr); // converting next token to 'int'
a_ptr = strtok (NULL, " "); // reading next token
}
for(j = 0; j < i; ++j) // the 'i' can tell you how much numbers you have
printf(j ? ", %d" : "%d", n[j]);
printf("\n");
fclose(input);
return 0;
}
忽略行的事情...
继续阅读数字直到 EOF
int array[1000];
int k = 0;
int prev, last;
if (scanf("%d", &prev) != 1) /* error */;
while (scanf("%d", &last) == 1) {
array[k++] = prev;
prev = last;
}
// array has the k numbers in the first line
// prev has the single number in the last line
如果需要,可以使用 malloc()
、realloc()
和 free()
使数组动态化。