【问题标题】:scanset not working properly in visual studio code扫描集在 Visual Studio 代码中无法正常工作
【发布时间】:2025-12-17 12:35:01
【问题描述】:

你好,我是 Visual Studio 代码的新手,我搜索了如何在 c 中读取带空格的字符串

得到以下方法

https://www.geeksforgeeks.org/taking-string-input-space-c-3-different-methods/

所以我在 Visual Studio 中使用了上述链接中指定的扫描集,它在一个程序中运行良好

具体来说,如果只有一个带有 scanset 的 scanf 存在,那么一开始它也可以工作

以下是第一个扫描集没有读取任何内容的两个程序,所以我检查了其他扫描集工作正常的程序

这里有两个程序

1)scanset 甚至没有读取字符串并退出

#include<stdio.h>
#include<iostream>

int main(){
    char s[1000];
    int N,K,T = 0;
    int g=0;

    scanf("%d",&T);

    scanf("%d%d",&N,&K);

    scanf("%[^\n]%*c",s);
    
    for(int i=0;i<T;i++){
        for(int j=1;j<=N/2;j++){
            if(s[j]!=s[N-j+1]){
                g= g+1;
            }
    }
    if(g!=K){
        printf("Case #%d: %d",T,K-g);
    }
    
    
}

}

输出

PS C:\Users\SriHarsha> cd "c:\Users\SriHarsha\" ; if ($?) { g++ kgoodness.cpp -o kgoodness } ; if ($?) { .\kgoodness }
1 
5 2
PS C:\Users\SriHarsha> 

其中 scanset 读取一个字符串并给出输出,但是当我使用其他 scanf 读取简单字符时,第二个 scanf 语句不起作用

#include<stdio.h>
int main(){
    char s[1000];
    char d;
    scanf("%[^\n]%*c",s);
    for(int i=0;i<10;i++){
        printf("%c",s[i]);
    }

    scanf("%c",&d);
    printf("%c",d);

}

输出

PS C:\Users\SriHarsha> cd "c:\Users\SriHarsha\" ; if ($?) { g++ scanf.cpp -o scanf } ; if ($?) { .\scanf }
sri
sri

PS C:\Users\SriHarsha> 

【问题讨论】:

  • scanf("%d%d",&amp;N,&amp;K); scanf("%[^\n]%*c",s); 无法读取 1(space)2\nXYZ\n"。考虑使用fgets() 读取所有用户输入。
  • 您还在使用scanf() 还是只使用fgets()
  • 谢谢你,莫妮卡你的建议奏效了
  • 对不起,我给了 scanf(" %c ") 而不是 scanf(" %c")

标签: c visual-studio-code


【解决方案1】:

scanf 似乎不起作用的两种情况下,用于读取字符串的格式说明符格式错误..

scanf 调用的格式说明符格式错误,实际上不会将字符串读入变量s scanf("%[^\n]%*c",s);

如果您的意图是将字符串读入s,我建议将该行更改为:scanf("%s",s);

【讨论】:

  • scanf("%s",s); 不适用于 OP 的“如何读取带空格的字符串”。没有宽度限制,比gets()差。
  • 莫妮卡没有显示任何错误值PS C:\Users\SriHarsha&gt; cd "c:\Users\SriHarsha\" ; if ($?) { g++ kgoodness.cpp -o kgoodness } ; if ($?) { .\kgoodness } 1 Value of errno: 0 5 2 Value of errno: 0 Value of errno: 0