2013-07-10 64 views
1
#include<stdio.h> 
#include<string.h> 

struct s { 
    char ch[20]; 
    float a; 
}; 

int main() 
{ 
    struct s p[10]; 
    int i; 
    for(i=0;i<10;i++) 
    { 
     scanf("%s%f",p[i].ch,p[i].a); 
    } 
} 

這段代碼有什麼問題?C編程結構

它給運行時錯誤。

有什麼問題?

回答

3

我認爲問題在於p[i].a參數;代替 使用&p[i].a

+2

d '哦!打我吧 –

+0

@DrewMcGowen仍然得到所有的聲望.... –

+0

@LiranElisha爲什麼分配?它已經分配好了。至少對我來說,這就是爲什麼你沒有得到upvote – fayyazkl

2

在生產線:

scanf("%s%f", p[i].ch, p[i].a); 

您使用p[i].afloat*(指針),而這是一個float。你正在調用未定義的行爲。你可能想這樣做:

scanf("%s%f", p[i].ch, &p[i].a); 
7

大部分的錯誤來自這一行。

scanf("%s%f",p[i].ch,p[i].a); 

您應該使用的p[i].a地址,並且還限制字符的數量在p[i].ch寫。

scanf("%19s%f", p[i].ch, &p[i].a); 
+0

以%nums爲上限進行正確推理。 +1。值得一提的是,即使您嘗試輸入更多字符,%19s也會忽略其他字符。 – fayyazkl

+1

你還應該提到代碼應該是'if(scanf(「%19s%f」,p [i] .ch,&p [i] .a)!= 2){... read error ...} '。 –

+0

@JonathanLeffler從'man scanf':「s」匹配一系列非空白字符;下一個指針必須是一個指向字符數組的指針,該指針的長度足以保存輸入序列和終止空字節('\ 0'),該字節會自動添加。 –

3

更改您這樣的代碼:

#include <stdio.h> 
#include <string.h> 
struct s { 
    char ch[20]; 
    float a; 
}; 

int main(){ 
    struct s p[10]; 
    int i; 
    for(i=0;i<10;i++){ 
     scanf("%s%f",p[i].ch, &p[i].a); 
    } 
} 

注意變量afloat類型;您在使用scanf時需要傳遞其內存地址。

3

我沒碰過C代碼一段時間,但它不應該是這樣的

scanf("%s%f",p[i].ch,&(p[i].a)); 

(你必須給變量的內存地址爲scanf功能。)