| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 569 人关注过本帖
标题:關於 scanf 的錯誤運作問題,請指教~
只看楼主 加入收藏
no_use
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2013-5-12
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
關於 scanf 的錯誤運作問題,請指教~
程序代码:
#include <stdio.h>
#include <stdlib.h>
int main ()
{
    char str[20];
    int A, B, C;
    
    printf("請輸入學生姓名:\n");
    scanf("%s", str); 
    
    printf("請輸入平時考、期中考及期末考成績:\n");
    scanf("%d %d %d", &A, &B, &C);
    
    printf("%s的平時考、期中考及期末考成績分別為:%d、%d、%d\n", str, A, B, C);    
    
    system("PAUSE");
    return 0;
}


此程式本可以正常運作的,例如當我輸入 CHAN 作為字串時~
但當我輸入字串「CHAN TAI MAN」時,程式便不能正常運作~
我明白「scanf("%s", str);」只會輸入空白位前的字串,即 CHAN~
但輸入 CHAN TAI MAN 後,程式便自動執行到尾,沒有停下來讓使用者輸入 ABC 的數值,最後輸出 ABC 的數值是沒有意義的數字~
請問為何會這樣呢?

還有另一問題,當我將「scanf("%s", str); 」換成「scanf("%5s", str); 」,但在輸入字串時輸入超過五個字元時,情況同上~
假設我輸入 CHANTAIMAN,程式便自動執行到尾,沒有停下來讓使用者輸入 ABC 的數值,最後輸出 ABC 的數值是沒有意義的數字~
程式到最後輸出字串是 CHANT,這是預期的結果沒錯,只是中間沒有停下讓使用者輸入 ABC 的數值~
請問為何會這樣呢?

[ 本帖最后由 no_use 于 2013-5-29 22:48 编辑 ]
2013-05-29 22:47
子楠
Rank: 3Rank: 3
来 自:武汉
等 级:论坛游侠
帖 子:111
专家分:164
注 册:2013-4-9
收藏
得分:5 
空格相当于是字符串的结束符了,所以只输出chan
你后面又输入了两个字符串和空格这就相当于给a,b,c赋值了
2013-05-29 23:01
子楠
Rank: 3Rank: 3
来 自:武汉
等 级:论坛游侠
帖 子:111
专家分:164
注 册:2013-4-9
收藏
得分:5 
后面也是如此,
2013-05-29 23:01
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:10 
输入"CHAN TAI MAN"的时候,scanf("%s", str)读取了第一个单词"CHAN",然后输入位置标记在'T'处(之前的空白字符被跳过)。
之后scanf("%d %d %d", &A, &B, &C);尝试从'T'处开始读取一个十进制整数,很明显格式错误,所以错误标记被设置,之后所有读的操作都会失败。
至于scanf("%5s", str),5代表最多读取的字符数,当你输入"CHANTAIMAN","CHANT"输入到str之后,输入位置被标记在'A'处,原因同上。

My life is brilliant
2013-05-29 23:22
no_use
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2013-5-12
收藏
得分:0 
上面的大大解釋得很清楚,謝謝~
2013-05-30 23:15
快速回复:關於 scanf 的錯誤運作問題,請指教~
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018262 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved