2014-02-06 31 views
1

我试图让程序打印出“OK”,只要我在最后输入'y'作为选择,但它不是循环,它只是打印出“OK”并结束该程序即使我在最后输入'y'。请帮忙。程序不循环

#include <stdio.h> 
int main() 
{ 
    char c = 'y'; 
    while (c == 'y') 
    { 
     printf_s("OK\n"); 
     scanf_s("%c", &c); 
     if (c != 'y') 
     { 
      break; 
     } 
    } 
    return 0; 
} 
+0

我编辑了我的问题 – mib1413456

+2

您在windows系统中使用['fflush(stdin)'](http://msdn.microsoft.com/en-us/library/9yky46tz.aspx)之前scanf –

+1

您可能想要检查[一个'scanf_s'参考](http://msdn.microsoft.com/en-us/library/w40768et.aspx)。 –

回答

4

在当你按下回车关键然后一个换行符\n传递到输入与y一起第一次迭代。第二次迭代scanf_s读数为\n。 更改

scanf_s("%c", &c); 

scanf_s(" %c", &c); 
     ^Notice the space before %c 

之前%c说明符的空间可以消耗任何数量的空白字符。

+0

我试过你的方法,它不工作。 – mib1413456

+2

'scanf_s'方法要求所有存储位置都必须遵循显式大小。 – JaredPar

-1

%c之前放一个空格来跳过空格。

2

如下

scanf_s("%c", &c, 1); 

这个额外的参数指定所述c参数的大小更改scanf_s线。普通的旧scanf不需要这种说法,但与_s结束版本做

另外,if块与break语句是不必要的,因为在while循环条件有效地做同样的事情。它可以被写成如下

while (c == 'y') 
{ 
    printf_s("OK\n"); 
    scanf_s("%c", &c, 1); 
} 
0

你是错的scanf

如果你使用这样你也会看到它的工作..

 #include <stdio.h> 

int main() 
{ 
    int c = 1; 
    while (c == 1) 
    { 
     printf_s("OK\n"); 
     scanf_s("%d", &c); 
     if (c != 1) 
     { 
      printf_s("hello\n"); 
       continue; 
     } 

    } 
    return 0; 
} 
+0

他不是用scanf“错”的。您可以扫描一个角色。 – MrHappyAsthma

+0

我没说“scanf无法读取字符!!!” – goGud

+0

他正在使用scanf_s来扫描一个字符。将它改为int并不能帮助他解决这个问题,因为他的scanf_s没有必要的第三个参数。他不是“你错了scanf” – MrHappyAsthma

0

OK我用scanf函数代替scanf_s的,解决了这个问题,谢谢大家。

+0

如果您想继续使用'scanf_s',请参阅我的答案,因为它会更正htis API的用法 – JaredPar