2011-10-15 85 views
0

這是文件。從文件中讀取字符。 C語言

X 1 0 1 
1 X X 1 
1 0 1 0 

1 1 0 X 
0 X 1 1 
1 X 1 0 

這是我的代碼..第1版。

char cha2[1]; 
int patternStored[180]; 
for(a=0;a<(numberOfPatterns*12);a++) 
    { 
     fscanf(patternMatFile,"%1s",cha2); 
     if(cha2[0]=='X') 
     { 
      patternStored[a]=2; 
     } 
     else 
     { 
      patternStored[a]=atoi(cha2); 
     } 
    } 

代碼的目的是爲了在一次讀取一個字符,並將其保存到數組 上面的代碼工作正常,但..

在循環結束時,我有此錯誤

Run-Time Check Failure #2 - Stack around the variable 'cha2' was corrupted. 

這是第二個版本。

char cha[4]; 
int patternStored[180]; 
for(a=0;a<(numberOfPatterns*12);a++) 
    { 
     fscanf(patternMatFile,"%c",cha); 
     if(cha[0]=='X') 
     { 
      patternStored[a]=2; 
     } 
     else 
     { 
      patternStored[a]=atoi(cha); 
     } 
    } 

第二個版本沒有錯誤。但它僅與%d ..只有數字工程..

我居然不知道正確的方式來獲得文件使用fscanf,尤其是%事單個字符。

TKZ ..

+1

從文件讀取時,'fscanf'幾乎從來不是答案。 'fgets' /'sscanf'幾乎總是更好,通常有比這更好的方法。 –

回答

1

爲了得到一個字符,你需要使用%c

+0

我在版本1中使用了'%c'而不是'%1s'。沒有錯誤。是的,那太好了。而且我在循環結束時放了一個break,並檢查了我的整數數組,除了第一個數組外,它有'-858993460'。我追溯了前5次。只有前5個值在裏面。這是正常還是錯誤? – william