最初の scanf を次のように変更するだけです。
scanf("%d\n",&a);
それ以外の場合、2 番目の scanf は \n を参照して 0 項目を読み取ります (したがって、msg は変更されません。
元のコードといくつかの追加の診断を使用して:
#include <stdio.h>
#include <string.h>
int main() {
int a;
int itemsScanned;
char msg[10]; strcpy (msg, "unchanged");
itemsScanned=scanf("%d",&a);
printf("itemsScanned=%d a=%d\n",itemsScanned, a);
itemsScanned=scanf("%[^\n]s",msg);
printf("itemsScanned=%d msg=%s\n",itemsScanned, msg);
return 0;
}
出力 (3<\nl と入力した場合) は次のとおりです。
> ./a.out
3
itemsScanned=1 a=3
itemsScanned=0 msg=unchanged
最初の scanf に \n を追加し、5\nlHugo\nl と入力します。
./a.out
5
Hugo
itemsScanned=1 a=5
itemsScanned=1 msg=Hugo