【发布时间】:2017-06-11 00:18:53
【问题描述】:
我似乎无法让任何一个函数使用此代码执行任何操作。我 99% 确定我的格式是正确的,并且我已经多次测试了这些函数本身。似乎只有在这里我遇到了任何问题。
如果这是一个愚蠢的问题,我深表歉意;如果是我会删除这个。如果组织方式看起来很奇怪,我还删除/修改了与问题无关的代码。
使用 fget:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
char name[50];
char yesno;
void sleep() {
printf("Try again? (y/n)\n" );
scanf("%s", &yesno);
if (yesno == 'y') {
puts("Name?");
fgets(name,50,stdin);
printf("Name is %s\n", name);
}
else {
printf("Null");
}
}
int main() {
puts("Begin? y/n");
scanf("%s", &yesno);
if (yesno == 'y') {
sleep();
}
}
代码编译正确,但运行时退出
Name?
Name is
一旦执行到那个点。
用scanf代替fgets,
scanf("%[^\n]s", name);
同样的问题也会发生。奇怪的是,
scanf("%s", name);
有效,但显然只扫描直到达到空白。
【问题讨论】:
-
对不起,如果不清楚 - 我没有混合它们;我是说使用 scanf 或 fgets 都会导致同样的问题。还是我误会了你?
-
@Badda:感谢您提供的链接。这是一本很好的读物——它会启发很多人。
-
“%s”格式说明符用于字符串,而不是字符。由于
yesno是char,因此使用格式说明符%s传递其地址是没有意义的。