[英]Using fscanf to read a string and then a variable number of integers to EOF
我在開始分配一個項目時遇到了一些麻煩。 我不能使用字符串運算符, fgets
等。我需要將文件掃描到EOF。
這是文件的示例:
AND 3 2 1
OR 4 5 6
SPECIAL 4 5 6 7
我試圖做的是設置一個while循環:
while (fscanf(circuit, "%s", cur_gate) != EOF){
然后嘗試檢查cur_gate字符串是什么:
if (cur_gate[0] == 'A'){
問題是,我不知道讀取字符串后如何掃描3個整數。 最終,一旦讀取到SPECIAL,我就需要掃描4個整數。
我想將第一個整數存儲在名為Output的數組中,並將其余的整數存儲在稱為INPUT的數組中。
因此,總而言之,我將如何fscanf一個字符串,然后fscanf根據讀取的字符串可變數量的整數?
根據我對您的問題的理解,以下代碼將為您提供幫助。
我假設,您只是想將所有輸出存儲在一個數組中,類似地,將所有輸入存儲在一個數組中。 因此,根據您的示例,您想在輸出數組中存儲3,4,4(單詞后的第一個整數)。 其余的整數需要轉到另一個輸入數組。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX_CHAR 256
#define MAX_IN 100
#define MAX_OUT 100
enum
{
FALSE = 0,
TRUE
};
int main()
{
char word[MAX_CHAR];
FILE *fp;
int i = 0, in[MAX_IN];
int o = 0, out[MAX_OUT];
int flag = FALSE;
fp = fopen("dict.txt","r");
if(NULL != fp)
{
while(fscanf(fp, "%s", word) != EOF)
{
printf("%s\n",word);
if(0 != isalpha(word[0]))
{
flag = TRUE;
}
else
{
if(TRUE == flag)
{
out[o] = atoi(word);
o++;
flag = FALSE;
}
else
{
in[i] = atoi(word);
i++;
}
}
}
fclose(fp);
}
int j;
printf("INPUT: ");
for(j=0; j<i; j++)
{
printf("%d\t",in[j]);
}
printf("\n");
printf("OUTPUT: ");
for(j=0; j<o; j++)
{
printf("%d\t",out[j]);
}
printf("\n");
return(0);
}
輸出為您提供的文件示例
INPUT: 2 1 5 6 5 6 7
OUTPUT: 3 4 4
免責聲明:該代碼已在我的環境中編譯和測試。 我鼓勵您自己處理錯誤處理方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.