簡體   English   中英

使用fscanf讀取字符串,然后將可變數量的整數轉換為EOF

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM