键盘输入函数(scanf、getchar)在gcc的循环中为什么只能输入一次?
发布网友
发布时间:2022-04-24 02:00
我来回答
共1个回答
热心网友
时间:2023-10-20 13:36
我没有 mac, gcc.
理论上 这段 c 语言 符合 标准 c. 应当没问题。
注意你输入前,是否多按了Enter键或空白。
你可以在 n=getchar() 后面 加一句:
printf("n=%c %#x\n",n,n); // 打印出 你刚拍入的 字符 和它的 16进制值。
检查 你的输入 是否正确。
如果是 y, 应当 得: n=y 0x79
否则是输入问题。追问我是亲自在mac linux上运行过的,还了两种输入方法,scanf getchar,后来也加了打印。循环也换过for循环,但是运行以后只收输入一次就跳出循环了。如果你有linux的话可以试一下。也可以试一下VS,我觉得应该没问题。
追答你若用 scanf() 时,注意格式,在 %c 前要有一个空格:
scanf(" %c",&n);
这样保证忽略空白和回车换行,只读入有形字符。
后面也加上: printf("n=%c %#x\n",n,n);
如果打印出的是 n=y 0x79 则一定能继续循环。
--------
mac 与 windows 主要不同是 mac 用 CR, windows 用 CRLF, c 语言用 LF 作行结束标志.
热心网友
时间:2023-10-20 13:36
我没有 mac, gcc.
理论上 这段 c 语言 符合 标准 c. 应当没问题。
注意你输入前,是否多按了Enter键或空白。
你可以在 n=getchar() 后面 加一句:
printf("n=%c %#x\n",n,n); // 打印出 你刚拍入的 字符 和它的 16进制值。
检查 你的输入 是否正确。
如果是 y, 应当 得: n=y 0x79
否则是输入问题。追问我是亲自在mac linux上运行过的,还了两种输入方法,scanf getchar,后来也加了打印。循环也换过for循环,但是运行以后只收输入一次就跳出循环了。如果你有linux的话可以试一下。也可以试一下VS,我觉得应该没问题。
追答你若用 scanf() 时,注意格式,在 %c 前要有一个空格:
scanf(" %c",&n);
这样保证忽略空白和回车换行,只读入有形字符。
后面也加上: printf("n=%c %#x\n",n,n);
如果打印出的是 n=y 0x79 则一定能继续循环。
--------
mac 与 windows 主要不同是 mac 用 CR, windows 用 CRLF, c 语言用 LF 作行结束标志.
热心网友
时间:2023-10-20 13:36
我没有 mac, gcc.
理论上 这段 c 语言 符合 标准 c. 应当没问题。
注意你输入前,是否多按了Enter键或空白。
你可以在 n=getchar() 后面 加一句:
printf("n=%c %#x\n",n,n); // 打印出 你刚拍入的 字符 和它的 16进制值。
检查 你的输入 是否正确。
如果是 y, 应当 得: n=y 0x79
否则是输入问题。追问我是亲自在mac linux上运行过的,还了两种输入方法,scanf getchar,后来也加了打印。循环也换过for循环,但是运行以后只收输入一次就跳出循环了。如果你有linux的话可以试一下。也可以试一下VS,我觉得应该没问题。
追答你若用 scanf() 时,注意格式,在 %c 前要有一个空格:
scanf(" %c",&n);
这样保证忽略空白和回车换行,只读入有形字符。
后面也加上: printf("n=%c %#x\n",n,n);
如果打印出的是 n=y 0x79 则一定能继续循环。
--------
mac 与 windows 主要不同是 mac 用 CR, windows 用 CRLF, c 语言用 LF 作行结束标志.
热心网友
时间:2023-10-20 13:36
我没有 mac, gcc.
理论上 这段 c 语言 符合 标准 c. 应当没问题。
注意你输入前,是否多按了Enter键或空白。
你可以在 n=getchar() 后面 加一句:
printf("n=%c %#x\n",n,n); // 打印出 你刚拍入的 字符 和它的 16进制值。
检查 你的输入 是否正确。
如果是 y, 应当 得: n=y 0x79
否则是输入问题。追问我是亲自在mac linux上运行过的,还了两种输入方法,scanf getchar,后来也加了打印。循环也换过for循环,但是运行以后只收输入一次就跳出循环了。如果你有linux的话可以试一下。也可以试一下VS,我觉得应该没问题。
追答你若用 scanf() 时,注意格式,在 %c 前要有一个空格:
scanf(" %c",&n);
这样保证忽略空白和回车换行,只读入有形字符。
后面也加上: printf("n=%c %#x\n",n,n);
如果打印出的是 n=y 0x79 则一定能继续循环。
--------
mac 与 windows 主要不同是 mac 用 CR, windows 用 CRLF, c 语言用 LF 作行结束标志.
热心网友
时间:2023-10-20 13:36
我没有 mac, gcc.
理论上 这段 c 语言 符合 标准 c. 应当没问题。
注意你输入前,是否多按了Enter键或空白。
你可以在 n=getchar() 后面 加一句:
printf("n=%c %#x\n",n,n); // 打印出 你刚拍入的 字符 和它的 16进制值。
检查 你的输入 是否正确。
如果是 y, 应当 得: n=y 0x79
否则是输入问题。追问我是亲自在mac linux上运行过的,还了两种输入方法,scanf getchar,后来也加了打印。循环也换过for循环,但是运行以后只收输入一次就跳出循环了。如果你有linux的话可以试一下。也可以试一下VS,我觉得应该没问题。
追答你若用 scanf() 时,注意格式,在 %c 前要有一个空格:
scanf(" %c",&n);
这样保证忽略空白和回车换行,只读入有形字符。
后面也加上: printf("n=%c %#x\n",n,n);
如果打印出的是 n=y 0x79 则一定能继续循环。
--------
mac 与 windows 主要不同是 mac 用 CR, windows 用 CRLF, c 语言用 LF 作行结束标志.