none
文件读写操作 RRS feed

  • 问题

  • 比如说:
    我做了一个结构体
    struct Node
    {
       char data;
        int   NO;
    }
    现在有一个 data.txt 的文本文件,里面写着:
    A
    12
    B
    45
    C
    67
    我现在要创建一个Node[3]的数组
    并且把   A和12放到Node[0]的data和NO里
        把   B和45放到Node[1]的data和NO里
        把   C和67放到Node[2]的data和NO里
    这个函数要怎么写啊??纠结!!!
    2011年10月28日 7:51

答案

  • 你可以在函数体中添加以下代码,实现你想要的功能。
     
              Node nodes[3];
    	 FILE *fp = fopen("file.txt", "rt");
    	 for(int i=0;i<3;i++)
    	 {	 	
    	  fscanf(fp, "%c\r\n", &nodes[i].data);
    	  fscanf(fp, "%d\r\n", &nodes[i].NO);
    	  if(feof(fp))
    	  {break;}
    	 }
    	 fclose(fp);
    


    Helen Zhao[MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已建议为答案 Helen Zhao 2011年11月3日 1:53
    • 已标记为答案 Helen Zhao 2011年11月7日 2:53
    2011年11月1日 9:17
  • int _tmain(int argc, _TCHAR* argv[])
    {
    	struct Node
    	{
    		char data;
    		int   NO;
    	};
    #define MAX_COUNT 3
    	Node nodes[MAX_COUNT];
    	try
    	{
    		CStdioFile file(_T("E:\\data.txt"), CFile::modeRead);
    		CString strLine(_T(""));
    		int nIndex = 0;
    		int i = 0;
    		while(file.ReadString(strLine))
    		{
    			if(nIndex >= MAX_COUNT)
    				break;
    			if(++i % 2)
    			{
    				nodes[nIndex].data = strLine.GetAt(0);
    			}
    			else
    			{
    				nodes[nIndex].NO = _ttoi(strLine);
    				nIndex++;
    			}
    		}
    		file.Close();
    	}
    	catch (CFileException* e)
    	{
    		e->ReportError();
    		e->Delete();
    	}
    	return 0;
    }
    

     


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    • 已建议为答案 Helen Zhao 2011年11月3日 1:53
    • 已标记为答案 Helen Zhao 2011年11月7日 2:53
    2011年11月1日 9:39
    版主

全部回复

  • fopen()打开文件

    fgets()获取字串

    获取两次写一次

    用atoi将字串转成数字。

    2011年10月28日 8:46
  •  FILE *fp = fopen("data.txt", "rt");
     while (!feof(fp))
     {
      Node node;
      fscanf(fp, "%c\r\n", &node.data);
      fscanf(fp, "%d\r\n", &node.NO);

      printf("Node.data = %c, node.NO = %d.\r\n", node.data, node.NO);
     }
     fclose(fp);

    2011年10月28日 8:48
  • 你可以在函数体中添加以下代码,实现你想要的功能。
     
              Node nodes[3];
    	 FILE *fp = fopen("file.txt", "rt");
    	 for(int i=0;i<3;i++)
    	 {	 	
    	  fscanf(fp, "%c\r\n", &nodes[i].data);
    	  fscanf(fp, "%d\r\n", &nodes[i].NO);
    	  if(feof(fp))
    	  {break;}
    	 }
    	 fclose(fp);
    


    Helen Zhao[MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已建议为答案 Helen Zhao 2011年11月3日 1:53
    • 已标记为答案 Helen Zhao 2011年11月7日 2:53
    2011年11月1日 9:17
  • int _tmain(int argc, _TCHAR* argv[])
    {
    	struct Node
    	{
    		char data;
    		int   NO;
    	};
    #define MAX_COUNT 3
    	Node nodes[MAX_COUNT];
    	try
    	{
    		CStdioFile file(_T("E:\\data.txt"), CFile::modeRead);
    		CString strLine(_T(""));
    		int nIndex = 0;
    		int i = 0;
    		while(file.ReadString(strLine))
    		{
    			if(nIndex >= MAX_COUNT)
    				break;
    			if(++i % 2)
    			{
    				nodes[nIndex].data = strLine.GetAt(0);
    			}
    			else
    			{
    				nodes[nIndex].NO = _ttoi(strLine);
    				nIndex++;
    			}
    		}
    		file.Close();
    	}
    	catch (CFileException* e)
    	{
    		e->ReportError();
    		e->Delete();
    	}
    	return 0;
    }
    

     


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    • 已建议为答案 Helen Zhao 2011年11月3日 1:53
    • 已标记为答案 Helen Zhao 2011年11月7日 2:53
    2011年11月1日 9:39
    版主