我想存储一系列整数,直到我按下数组中的输入。我如何实现
输入: 1(标签空间)2(标签空间)3(标签空间)4(标签空间)输入
我试过这个
#include<stdio.h>
main()
{
int i,j,c,d;
int a[5];
for(i=0;i<2;i++){
j=0;
while((d=scanf("%d",&c))==1){
a[j]=c;
j=j+1;
}
}
}
我不知道scanf如何工作并使用scanf返回值。请解释如何使用scanf并且
来存储此输入2)scanf中还可以使用%d?
我有一个包含200行的文件,其中包含这样的数字 (注意:每行有不同数量的值,但所有数字都小于200)
1\t2\t3\t4\t5\t
2\t3\t4\t5\t6\t7\t8\t
11\t12\t13\t
.
.
200
...所以我必须将其存储为邻接列表表示
答案 0 :(得分:1)
问题的第一部分。 scanf()返回成功读取的元素数,但这里没用,你可以只扫描一个循环,当你按回车键时,scanf()会在一行中选择你的整数。
#include <stdio.h>
int main(void) {
int a[5];
int i, n;
for(i=0;i<5;i++)
{
if(scanf("%d",&a[i]) != 1)
{
printf("Value not read correctly\n");
break;
}
}
n = i;
for(i=0;i<n;i++)
printf("%d\n",a[i]);
return 0;
}
对于第二个问题,你必须做一些事情
1.使用fgets()
2.使用strtok()
打开您的行,并使用制表符作为分隔符。
3.现在使用atoi()
4.现在用整数做你想做的事。即创建一个节点将您的整数添加到节点
答案 1 :(得分:0)
让我们对每行的宽度做出一些合理的假设 这些假设对简单代码很有用,但一般不需要。
#define LINE_WIDTH_MAX 1000
#define INTS_PER_LINE_MAX 100
#define ROWS_PER_FILE (200 /* given by OP */)
用fgets()
读取每一行,然后扫描。可以使用strtol()
,sscanf()
或各种方法。
此方法使用sscanf()
和"%n"
来确定下一个数字可能会跟随的时间。
int row;
for (row = 0; row < ROWS_PER_FILE; row++) {
char buf[LINE_WIDTH_MAX + 2];
if (fgets(buf, sizeof buf, stdin) == NULL) {
break; // Handle EOF or IO error
}
int num[INTS_PER_LINE_MAX];
char *p = buf;
for (int i = 0; i<INTS_PER_LINE_MAX; i++) {
int n = 0;
if (1 != sscanf(p, "%d %n", &num[i], &n)) {
break;
}
p += n;
}
if (*p) Handle_GarbageInLIne();
// do something with the `i` numbers
}
注意:
建议永远不要使用scanf()
/