1. 程式人生 > >scnaf()讀入字符串需要註意的地方

scnaf()讀入字符串需要註意的地方

穩定 宋體 字符 數組 出現 gets cst return font

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
    char ch[1000],cch[1001];
    int a;
    cin>>ch;
    scanf("%d%s",&a,cch);
    printf("%s\n%s",ch,cch);
    return 0;
}

scanf在讀入字符串的時候是不加&,因為數組本身就是個地址

char ch[1001]
scanf("%s",ch);

當然如果你是在是不確定輸入對不對,你就用cin,雖然慢一點,但是很穩定
cin:運算符

>>的作用是跳過空白,讀入後面的非空白字符,直到遇到另一個空白字符為止,並在串尾放一個字符\0

所以在使用cin輸入一個中間有空格的字符串時,會出現問題。

解決方案:用gets();

一個小scanf的小貼士——來自小爺永遠不死的博客

1、使用scanf("%c", &a)讀取a(a是char類型),如果讀取之前有換行符或者空格,那麽a就會把之前的換行符或者空格讀取到,解決方法就是這之前先getchar()一下。

2、而如果用scanf("%s", str)讀取str(我發現str是char或者char[]都是可以的),不會讀取前邊的換行符或者空格。

3、其他數值類類型是沒有這樣的問題的。

4、二維char數組不能用scanf("%s", str[i][j]),可以用scanf("%s", str[i])或者scanf("%c",&str[i][j]),前者速度更快,現在想了想應該是數組名可以表示數組首地址的原因。(3/6/2014 補)

scnaf()讀入字符串需要註意的地方