如何使用fscanf
(或处理文本文件中的stdin
s的任何其他函数)扫描具有相同长度的特定整数组,并将其放入相同数组中,但同时忽略比所需长度短的整数
以下是txt文件的外观:
63001234 1 1 -1 - - 0 1 1 1 - - 0
63001230 1 1 1 1 1 1 1 1 1 1 1 1
63001432 -1 -1 - - - - - - - - - -
63000176 - - 1 0 0 1 0 0 1 1 1 1
我需要存储63。。。一个整数数组中的数字以及另一个字符数组中的“1”、“1”、“0”和“-”。
这是现在我的扫描和测试功能于一体
int main() {
printf("insert the name of the txt file you want to scan from: ");
char fileopen [100];
scanf("%s", fileopen);
int Students [250];
char Grades [250] [12];
FILE *fop = fopen(fileopen ,"r");
if(fop == NULL){
printf("Error");
EXIT_FAILURE;
}
int counter = 0;
//read file
while(1){
if(fscanf(fop,"%d",&Students[counter]) == EOF){
break;
}
for(int j = 0; j < 12; j++){
fscanf(fop," %c",&Grades[counter][j]);
}
fscanf(fop,"\n");
counter++;
}
counter = 0;
//test what has been written in the arrays
while(counter <= strlen(Students)){
printf("%d", Students[counter]);
for(int j = 0; j < 12; j++){
printf(" %c", Grades[counter][j]);
}
counter++;
printf("\n");
}
}
您可以直接读取int和chars,而不是使用数字检查:
// You can use dynamic memory allocation here instead, or an appropriate max size.
// I used 100 because this is a template.
int numbers[100];
int chars[100][12];
char* line = (char*)malloc(100);
int i = 0;
while (true)
{
/* Read line into buffer */
if ((fgets(line, 100, file) == NULL) || ferror(file) || feof(file))
{
break;
}
/* Skip empty lines */
if (strcmp(line, "\n") != 0)
{
continue;
}
/* Scan the integer */
if (i == 0) {
sscanf(line, "%d", &numbers[0]);
} else {
sscanf(line, "\n%d", &numbers[i]);
}
/* Scan the 12 characters */
for (unsigned int j = 0; j < 12; ++j)
{
sscanf(line, " %c", &chars[i][j]);
}
i++;
}
我是Java新手,在过去从未遇到过麻烦的事情上苦苦挣扎。不管出于什么原因,我不能扫描代码中的int(或double),但我可以扫描字符串。我正在发布扫描程序无法正常工作的代码片段,请告诉我是否应该包含程序的其余部分。 在底部附近,不接受任何扫描值。我试着把它放在一个不同于的方法中,我试着重新排列它,为它创建一个单独的扫描仪,以及其他一些事情。调试器显示,不管怎样,我都会被卡在那行代码上。我做错了什
我试图构建一个通过扫描仪构建的整数ArrayList。用户必须输入5到10个整数才能使ArrayList有效,但在运行程序时,实际输入数将是未知的。 如何构建程序,使其只在用户输入5、6、7、8、9或10个整数时运行?
问题内容: 假设我得到一个介于1到127之间的随机数。我将该数字更改为二进制,并使用下面的代码将其从中删除: 现在,我想通过在必要时以零填充开头来使其长度为7个字符。我认为我需要使用一个for循环,但是有人可以告诉我该怎么做吗? 问题答案: 不,你不会。
我想为这个代码寻求一些帮助。我没有问题读取一个文件本身和使用它作为扫描仪。我可以很容易地数出文件的双倍数。作为一个例子,这些是txt文件的前五个double。(这些数字应该是垂直列出的,但我几乎不怀疑这会有所不同) 这段代码总体上只是打印0.0的“num”数量,而不是将实际数字本身相加。请帮忙,谢谢。
我听说,等数据类型的大小可能因平台而异。 我的第一个问题是:有人能举个例子,当程序假设一个是4字节,但在不同的平台上是2字节时,出了什么问题? 我的另一个问题与此有关。我知道人们用一些来解决这个问题,比如你有,,-这些变量保证是8位、16位、32位的,不管平台是什么——我的问题是,这通常是如何实现的?(我不是指library中的类型-我很好奇,怎么能强制某些类型总是说32位而不考虑平台??)
问题内容: 例如,我们可以像这样构造一个数组: 我看到了这样的构造,但是我不明白为什么这可能有用。 问题答案: 一个例子。说,你有一个功能 获取一些文件名。想象一下,您找不到满足条件的文件名。你还回来什么?您有2个选择- 返回null 或 0大小的array 。 大小 为 0的数组 的变体更好,因为您的调用方不需要检查 NULL, 并且可以以一致的方式处理该数组-例如,在循环中(在这种情况下为空)